【高精度】减法神童

问题 D: 【高精度】减法神童

时间限制: 1 Sec  内存限制: 64 MB
提交: 7  解决: 5
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

在科学城里住着一位减法神童,他可以在一秒钟内算出两个数相减的结果。这两个数可不是普通的数字,它们是11位以上的“宠然大物”。为了证明自己神奇的计算能力,减法神童请全城的人都来出题考自己,只要答错一题他就自愿放弃“减法神童”的称号。
你想考考减法神童吗?还是先编写一个程序帮我们算出任意两个11位以上的数相减的精确结果吧。

输入

第1行是被减数A,第2行是减数B(A,B的位数大于11,小于200)。

输出

A-B的结果。

样例输入

5894379463257
1245648324567

样例输出

4648731138690
 1 #include <iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 string s,t;
 6 int a[5005],b[5005],c[5005];
 7 int main()
 8 {
 9     cin>>s>>t;
10     int len1=s.size(),len2=t.size();
11     for(int i=len1-1;i>=0;i--)
12         a[len1-i-1]=s[i]-'0';
13     for(int i=len2-1;i>=0;i--)
14         b[len2-i-1]=t[i]-'0';
15     int len=max(len1,len2);
16     for(int i=0;i<len;i++)
17     {
18         c[i]+=(a[i]+b[i]);
19         if(c[i]>9)
20         {
21             c[i]-=10;
22             c[i+1]++;
23         }
24     }
25     if(c[len]!=0)
26     {
27         len++;
28     }
29     for(int i=len-1;i>=0;i--)
30         cout<<c[i];
31     cout<<endl;
32     return 0;
33 }
View Code

 由于疏忽,上面代码贴成了加法的,现已更改为减法,代码如下(感谢杨翰齐指出错误)

 1 #include <iostream>
 2 #include<string>
 3 using namespace std;
 4 string s,t;
 5 int a[300],b[300],c[300];
 6 int main()
 7 {
 8     cin>>s>>t;
 9     int len1=s.size();
10     int len2=t.size(),len;
11     if(s==t)
12     {
13         cout<<"0"<<endl;
14         return 0;
15     }
16     if((len1==len2&&s<t)||len1<len2)
17     {
18         cout<<"-";
19         string temp;
20         temp=s;
21         s=t;
22         t=temp;
23         len=len2;
24         swap(len1,len2);
25     }
26     len=len1;
27     for(int i=len1-1;i>=0;i--){
28         a[len1-i-1]=s[i]-'0';
29     }
30     for(int i=len2-1;i>=0;i--)
31         b[len2-i-1]=t[i]-'0';
32     for(int i=0;i<len;i++)
33     {
34         c[i]+=(a[i]-b[i]);
35         if(c[i]<0)
36         {
37             c[i]+=10;
38             c[i+1]--;
39         }
40     }
41     while(c[len]==0)
42     {
43         len--;
44     }
45     for(int i=len;i>=0;i--)
46         cout<<c[i];
47     cout<<endl;
48 //    cout << "Hello world!" << endl;
49     return 0;
50 }
View Code
如有错误,请指正,感谢!
原文地址:https://www.cnblogs.com/scott527407973/p/9314501.html