数的位数过长,就要用数组保存数了。
关于高精度的算法学习也是去的其他的地方偷师。
其他人的教程很详细,我在这儿就不赘述了
如果抱着学习高精度计算的话,强烈安利推荐一波:
https://www.cnblogs.com/ECJTUACM-873284962/p/6509429.html
这道题关于加法,题意很简单,但是有坑!!!
一开始的各种犯傻,然后以为前导0 会影响(其实不影响)
一直wa…
然后这个题的格式也是怪怪的,,,,
一直格式错误pe…
如图:
最后实在不行了,请教我亲爱的宇哥,,,,
可算A出来了。
闲话少说,上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char s1[1000+20], s2[1000+20];
int a[1000+20], b[1000+20];
int main()
{
int t, cnt = 0;
cin >> t;
while(t--)
{
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
cin >> s1 >> s2;
a[0] = strlen(s1);
b[0] = strlen(s2);
for(int i = 1; i <= a[0]; ++i)
a[i] = s1[a[0]-i] - '0';
for(int j = 1; j <= b[0]; ++j)
b[j] = s2[b[0]-j] - '0';
int k = a[0] > b[0]? a[0]: b[0];
for(int i = 1; i <= k; ++i)
{
a[i+1] += (a[i]+b[i])/10;
a[i] = (a[i]+b[i])%10;
}
if(a[k+1] > 0)
a[0] = k+1;
else
a[0] = k;
printf("Case %d:\n%s + %s = ",++cnt,s1,s2);
for(int i = a[0]; i >= 1; --i)
cout << a[i];
cout << endl;
if(t)
cout << endl; //代码的点睛之笔,类似于水仙花数最后一个数不能有空格,
//所以最后一个样例不能有两个空行
}
return 0;
}