华师一附中OI组

标题: 高精度加法 [打印本页]

作者: admin    时间: 2018-4-13 19:42
标题: 高精度加法
  1. #include<iostream>
  2. using  namespace std;
  3. string s1,s2,s3;
  4. int i,j,x1,x2,x3;
  5. int l1,l2;
  6. int main()
  7. {
  8.     cin>>s1>>s2;
  9.     ///用字符串的唯一目的就是读入方便
  10.     if (s1.size()<s2.size()) swap(s1,s2);
  11.     ///比较长短,长的放前面
  12.     l1=s1.size();
  13.     l2=s2.size();
  14.     for (i=1; i<=l1-l2; i++) s2='0'+s2;
  15.     ///短的前面添0以便对齐

  16.     ///cout<<s1<<endl<<s2;  输出检查
  17.     j=0; ///进位
  18.     for (i=l1-1; i>=0; i--)
  19.         ///从右往左加
  20.     {
  21.         x1=s1[i]-'0';///字符变数字
  22.         x2=s2[i]-'0';
  23.         x3=x1+x2+j;
  24.         j=x3/10;///进位处理
  25.         x3=x3%10;
  26.         s3=char(x3+'0')+s3;
  27.     ///数字变字符并加在结果左边

  28.     }
  29.     if (j==1) s3='1'+s3;///最高位处理
  30.     cout<<s3;
  31.     return 0;
  32. }
复制代码

作者: WJL    时间: 2018-8-12 20:45
  1. #include<iostream>
  2. using namespace std;
  3. const int maxn=510;
  4. int a[maxn],b[maxn],c[maxn];
  5. string s1,s2,s3;
  6. int l1,l2,l3;
  7. int x;
  8. int main()
  9. {
  10.     cin>>s1>>s2;
  11.     l1=s1.size();
  12.     l2=s2.size();
  13.     for(int i=0;i<=l1-1;i++) a[i]=s1[l1-i-1]-'0';
  14.     for(int j=0;j<=l2-1;j++) b[j]=s2[l2-j-1]-'0';
  15.         l3=l1>l2?l1:l2;
  16.     for(int i=0;i<=l3-1;i++)
  17.         c[i]=a[i]+b[i];
  18.         for(int i=0;i<=l3;i++)
  19.         {
  20.             x=c[i];
  21.             c[i]=x%10;
  22.             c[i+1]+=x/10;
  23.         }
  24.         l3=maxn-1;
  25.         while(c[l3]==0&&l3>0)
  26.      l3--;
  27.      for(int i=l3;i>=0;i--)
  28.         cout<<c[i];
  29.    return 0;
  30. }

复制代码

作者: WJL    时间: 2018-8-12 20:46
WJL 发表于 2018-8-12 20:45

数组
做法




欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2