日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

nyoj A+B Problem IV

發(fā)布時(shí)間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj A+B Problem IV 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

A+B Problem IV

時(shí)間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 難度:3 描述
acmj最近發(fā)現(xiàn)在使用計(jì)算器計(jì)算高精度的大數(shù)加法時(shí)很不方便,于是他想著能不能寫(xiě)個(gè)程序把這個(gè)問(wèn)題給解決了。
輸入
包含多組測(cè)試數(shù)據(jù)
每組數(shù)據(jù)包含兩個(gè)正數(shù)A,B(可能為小數(shù)且位數(shù)不大于400)
輸出
每組輸出數(shù)據(jù)占一行,輸出A+B的結(jié)果,結(jié)果需要是最簡(jiǎn)的形式。
樣例輸入
1.9 0.1 0.1 0.9 1.23 2.1 3 4.0
樣例輸出2
1 3.33 7

測(cè)試數(shù)據(jù)都對(duì),又在網(wǎng)上找了別人說(shuō)的有坑的側(cè)試數(shù)據(jù),也對(duì),就是提交不上
有興趣的看下,,歡迎知道原因的指導(dǎo)
一:

#include <iostream>
using namespace std;

bool flag;//標(biāo)記是否小數(shù)部分向整數(shù)部分有進(jìn)位

//計(jì)算整數(shù)部分的加法
string add_Int(string s1,string s2)
{
  if(s1.length()<s2.length())
  {
    string t=s1;
    s1=s2;
    s2=t;
  }
for(int i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
{
  s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));

  if(s1[i]-'0'>=10)
  {
    s1[i]=char((s1[i]-'0')%10+'0');
    if(i)
      s1[i-1]++;
  else
    s1="1"+s1;
  }
}
  return s1;
}
//計(jì)算小數(shù)部分的加法
string add_Dec(string s1,string s2)
{
  //如果小數(shù)的位數(shù)不相同
  if(s1.length()!=s2.length())
  {
    if(s1.length()<s2.length())
    {
      string t=s1;
      s1=s2;
      s2=t;
    }
for(int i=s2.length()-1,j=s2.length()-1;i>=0;i--,j--)
{
   s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));

   if(s1[i]-'0'>=10)
  {
    s1[i]=char((s1[i]-'0')%10+'0');
    if(i)
      s1[i-1]++;
    else
      flag=true;
   }
  }
}
//小數(shù)部分位數(shù)同
if(s1.length()==s2.length())
{
  for(int i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
  {
    s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));

    if(s1[i]-'0'>=10)
    {
      s1[i]=char((s1[i]-'0')%10+'0');
      if(i)
        s1[i-1]++;
      else
        flag=true;
    }

  bool flag1=true;

  for(int i=s1.length()-1;i>=0;--i)
    if(s1[i]!='0')
    {
      flag1=false;
      break;
    }
  if(flag1)
  {
    s1.clear();
  s1+="0";
  }

  }
}
  return s1;
}

int main()
{
  string s1,s2;
  while(cin>>s1>>s2)
  {
    string s1_Int,s1_Dec,s2_Int,s2_Dec;
    //s1的整數(shù)部分,s1的小數(shù)部分 ,s2的整數(shù)部分,s2的小數(shù)部分

    int s1_find=s1.find('.');//找到小數(shù)點(diǎn)的位置,把整數(shù)和小數(shù)分開(kāi)來(lái)計(jì)算
    if(s1_find!=-1)//如果存在小數(shù)點(diǎn)
    {
      for(int i=0;i<s1.find('.');++i)
      s1_Int+=s1[i];
      for(int i=s1.find('.')+1;i<s1.length();++i)
      s1_Dec+=s1[i];
    }
    if(s1_find==-1)//如果不存在小數(shù)點(diǎn)
    {
      s1_Int+=s1;
      s1_Dec+="0";
    }

? ? int s2_find=s2.find('.');//s2的小數(shù)點(diǎn)的位置
  if(s2_find!=-1)//如果存在小數(shù)點(diǎn)
  {
    for(int i=0;i<s2.find('.');++i)
    s2_Int+=s2[i];
    for(int i=s2.find('.')+1;i<s2.length();++i)
    s2_Dec+=s2[i];
  }
 if(s2_find==-1)//如果不存在小數(shù)點(diǎn)
  {
    s2_Int+=s2;
    s2_Dec+="0";
  }

    flag=false;//默認(rèn)為false如果有小數(shù)部分進(jìn)位,則值為true
    string t_Dec=add_Dec(s1_Dec,s2_Dec);//先做小數(shù)部分的加法

    string t_Int_Carry;//小數(shù)加法時(shí)向正數(shù)有進(jìn)位
    string t_Int;//小數(shù)加法向正數(shù)沒(méi)有進(jìn)位

    if(flag)// 如果小數(shù)部分向整數(shù)部分有進(jìn)位
    t_Int_Carry=add_Int(add_Int(s1_Int,s2_Int),"1");
    else//小數(shù)部分向整數(shù)部分沒(méi)有進(jìn)位
    t_Int=add_Int(s1_Int,s2_Int);

  if(t_Dec=="0")//如果小數(shù)部分為零
    if(flag)//小數(shù)部通過(guò)向整數(shù)部分進(jìn)位 產(chǎn)生的0
      cout<<t_Int_Carry<<endl;
    else//兩個(gè)數(shù)本來(lái)都為整數(shù)
       cout<<t_Int<<endl;
  else//小數(shù)部分不為零     

  {
    if(flag)
      cout<<t_Int_Carry<<"."<<t_Dec<<endl;
    else
      cout<<t_Int<<"."<<t_Dec<<endl;
   }


  }
  return 0;
}

?

二:

#include <iostream>
#include <string>
using namespace std;

string align(string ,int ,int );

int main()
{
int i,j,k;
string a,b;
while(cin>>a>>b)
{
for(j=0;j<a.length() && a[j]!='.';j++);
k=a.length() -j;
for(i=0;i<b.length() && b[i]!='.';i++);

if(i>j)
j=i;
if(b.length() -i>k)
k=b.length() -i; //分別得到整數(shù)最大位數(shù)j和小數(shù)最大位數(shù)k

a=align(a,j,k);
b=align(b,j,k); //按位對(duì)齊

for(i=a.length ()-1,j=0;i>=0;i--)
{
if(a[i]!='.')
{//加法運(yùn)算
a[i]=a[i]+b[i]+j-'0';
j=0;
if(a[i]>'9')
{
j=1;
a[i]-=10;
}
}
}
if(j)
a='1'+a; //補(bǔ)進(jìn)位

for(i=0;a[i]=='0';i++); //消前導(dǎo)0
for(b="",j=a.length ()-1;a[j]=='0';j--); //消尾數(shù)0

if(a[j]=='.')
j--; //整數(shù)處理
for(;i<=j;i++)
b+=a[i];
cout<<b<<endl;
}
return 0;
}

string align(string s,int ni,int nf)
{//數(shù)據(jù)位對(duì)齊
int i,j,k;
for(j=0;j<s.length()&&s[j]!='.';j++);

if(j==s.length())
s+=".0";
k=s.length()-j;

for(i=0;i<ni-j;i++)
s='0'+s;
for(i=0;i<nf-k;i++)
s+='0';
return s;
}

?

?

?

下面附上在網(wǎng)上看的別人的代碼。。。

?

#include<stdio.h>
#include<string.h>
char s1[410],s2[410];
int a1[820],b1[820];
char result[820];
void create(char *s,int *a)
{
int len=strlen(s);
int k;
if(strchr(s,'.')!=NULL) //判斷有無(wú)小數(shù)點(diǎn)
k=strchr(s,'.')-s; //標(biāo)記小數(shù)點(diǎn)的位置
else
k=len; // 無(wú)小數(shù)點(diǎn)
for(int i=k+1,j=399;i<len;i++,j--)//小數(shù)點(diǎn)后面的存到前四百位
a[j]=s[i]-'0';
for(int i=k-1,j=400;i>=0;i--,j++)//小數(shù)點(diǎn)前面的存放到后四百位
a[j]=s[i]-'0';
}
void init()
{
memset(a1,0,sizeof(a1));
memset(b1,0,sizeof(b1));
memset(result,0,sizeof(result));
}
void sum()
{
int s,v=0;
for(int i=0;i<820;i++)
{
s=a1[i]+b1[i]+v;
result[i]=s%10;
v=s/10;
}
}
void print()
{
int i=820;
while(result[i]==0&&i>=400)
{
i--;
}
int j=0;
while(result[j]==0&&j<400)
{
j++;
}
if(i==399&&j==400)//全是零的情況
printf("0\n");
else
{
for(;i>=400;i--)
{
printf("%d",result[i]);
}
if(j!=400)
{
printf(".");
}
for(int i=399;i>=j;i--)
printf("%d",result[i]);
printf("\n");
}
}
int main()
{
while(~scanf("%s %s",s1,s2))
{
init(); //每計(jì)算一次初始化數(shù)組
create(s1,a1);//轉(zhuǎn)化過(guò)程(2倍數(shù)組倒序存放小數(shù)或整數(shù))
create(s2,b1);//轉(zhuǎn)化過(guò)程
sum();//進(jìn)位求和過(guò)程
print();
}
return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/tianzeng/p/9080156.html

總結(jié)

以上是生活随笔為你收集整理的nyoj A+B Problem IV的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美日韩在线| 成人精品三级 | 成年视频在线观看 | 日本久久精品视频 | 国产黄色录像 | 国产精品天天av精麻传媒 | 91久久久久一区二区 | 欧美激情国产日韩精品一区18 | 国产成人在线看 | 亚洲网址在线观看 | 一级欧美一级日韩片 | av资源在线免费观看 | 国产午夜一级一片免费播放 | 亚洲国产欧洲 | 精品三级 | 青草视屏| 国产99久久久 | 99视频这里有精品 | 国产精品日韩欧美一区二区三区 | 午夜精品久久久久久久99 | 亚洲午夜精品久久久久久浪潮 | 丰满熟妇被猛烈进入高清片 | 天堂素人| 国产91清纯白嫩初高中在线观看 | 天天激情综合 | 欧美日韩偷拍视频 | 亚洲一区高清 | 息与子五十路翔田千里 | 色屁屁www | 色图在线观看 | 久久无码精品丰满人妻 | 影音先锋制服丝袜 | 免费一级黄 | 日本中文字幕视频 | 欧美人与禽性xxxxx杂性 | 欧美一区二区三区四区在线观看 | 欧美超逼视频 | 欧美做受xxxxxⅹ性视频 | av男人的天堂在线观看 | 男生和女生差差视频 | 欧美成人视 | 精品中文在线 | 人人妻人人澡人人爽国产一区 | 国产第六页 | 黄网在线免费观看 | 啪啪自拍| a级免费视频 | 女人18片毛片60分钟 | 成人在线免费看视频 | 日韩欧美网站 | 一级片免费在线观看 | 久久国产亚洲精品无码 | 高潮一区二区三区 | 日干夜操 | 日本成人一级片 | 打美女白嫩屁屁网站 | 91丝袜呻吟高潮美腿白嫩 | 色窝窝无码一区二区三区成人网站 | 波多野结衣久久久久 | 日本九九热 | 亚洲av永久无码精品 | 亚洲狠狠丁香婷婷综合久久久 | 中文字幕亚洲区 | 国产一区中文 | 丁香婷婷九月 | 三级在线观看 | 欧美永久 | 日韩免费av在线 | 污污视频在线观看网站 | 理论片高清免费理伦片 | 在线免费观看黄色 | 五月色丁香 | 欧美日在线观看 | 黄色成人在线观看 | 欧美另类第一页 | 国产一区二区三区在线 | 和漂亮岳做爰3中文字幕 | 优优色影院 | 久草在在线视频 | 国产精品探花一区二区三区 | 成人国产精品久久久网站 | 三级网站国产 | 51ⅴ精品国产91久久久久久 | japanese21ⅹxx日本| 肉肉av福利一精品导航 | 国产美女一区 | 国产精品一区二区三区久久久 | 久久99久久99精品 | 国产美女黄色 | 国产乱欲视频 | 久久精品欧美日韩 | 538精品在线视频 | 在线观看av资源 | 久久久亚洲 | 在线视频精品一区 | 日韩的一区二区 | 欧美黄色特级片 | 国产aⅴ精品一区二区果冻 台湾性生生活1 | 国产乱妇乱子 |