题目链接:https://acm.dingbacode.com/showproblem.php?pid=1002
题目注意事项:
1:多组输入还有输出格式(杭电最喜欢多组输入即卡一下输出了)
2:肉眼可见的大数相加(就是那long long都存不下的那种)
题目思路:
long long 满足不了题目的话,只能想到用两个字符串来保存一下两个大数,在字符串按位相加减,这里要注意的是,满十要向前面进一。
AC代码(含分析):
#include<bits/stdc++.h>//万能头文件
using namespace std;
int main()
{
int n;//n保存多组输入的案例数
cin>>n;
int temp=1;//temp控制输入的案例数
while(temp<=n)
{
char a[1001],b[1001],c[1001],d[1001],e[1001];
cin>>a>>b;//输入的两个数,用a[],b[]来存
strcpy(d,a);
strcpy(e,b);
if(strlen(a)<strlen(b))//用来判断那个数大一些(长一些),对齐相加
{
//c[]就是中间变量
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
}
//经过上面操作之后,a成功的保存了较大的数,b即为较小的那个数
int len1=strlen(a);
int len2=strlen(b);
for(int i=0;i<len2;i++)
{
a[len1-1-i]=a[len1-1-i]+b[len2-1-i]-'0';//用字符数组a来保存相加的结果
if(a[len1-i-1]>'9')//满十进一
{
a[len1-2-i]++;//前一个字符加1
a[len1-1-i]-=10;//当前字符减10
}
}
cout<<"Case "<<temp++<<":"<<endl;//输出样子
printf("%s + %s = %s\n",d,e,a);//输出样子
if(temp-1<n) cout<<endl;//杭电要求的输出格式
}
return 0;
}
不会还有人看不懂吧~
其实大数相加的还是python牛一些,读者自行完成~