版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj13821328013/article/details/75047366
一道很简单的题目让我做得恶心无比,大数问题,不熟悉java,还是用C++写吧。显然需要用到字符串,然后再将字符串中的数字转化为整数类型进行加法运算。去年做类似题目的时候还只知其然不知其所以然,现在明白了为什么不能直接读入数组。
然而时隔一年也忘记了思路,加上当时没有总结过,只是仿照代码敲了一遍,收获实在甚小。
参考网上的思路,读入字符串,逐位进行-‘0’操作,存入数组,进行数组加法,记得进位操作和数组初始化为0,这样清晰的思路代码简直信手拈来,但是还是遇到了意料之中的WA,上代码分析
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
int main ()
{
int n, i, cas=1;
char str1[1010],str2[1010];
int a[1010], b[1010],c[1010];
scanf("%d",&n);
int m=n;
while(n--)
{
scanf("%s %s",str1,str2);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int len=max(strlen(str1),strlen(str2));
int j=len,k=len;
for(i=strlen(str1)-1; i>=0; i--)
{
a[j--]=str1[i]-'0';
}
for(i=strlen(str2)-1; i>=0; i--)
{
b[k--]=str2[i]-'0';
}
for(i=len; i>=1; i--)
{
int ans=a[i]+b[i]+c[i];
if(ans>=10)
{
c[i]=ans%10;
c[i-1]=ans/10;
}
else
c[i]=ans;
}
printf("Case %d:\n",cas++);
printf("%s + %s = ",str1,str2);
if(c[0])
printf("%d",c[0]);
for(i=1; i<=len; i++)
printf("%d",c[i]);
printf("\n");
//printf("%d %d\n",m,cas);
if(m!=cas-1)
printf("\n");
}
return 0;
}
(1)刚开始将字符串转化为数组,忽略了不同位数问题,比如34+234存入数组应为034+234,这样才能进行对应位的加法,刚开始没注意到这个细节,想当然就存成340+234
(2)输出格式,最后一行输出不加空行,= =题目中有说吗?注意就是了= =