HDU-1002 A + B Problem II (模拟大数相加)
题意:给出两个很大的数A,B求和(这里最大位数为1000)
思路:对于很大的数相加,就不能往开int数据类型大小了,试着用char[]或者int[]来存储数位。然后将每一位相加,大于10则进位
完整代码:
#include<cstdio>
#include<cstring>
char str1[1000], str2[1000];
int a[1001], b[1001];
int main()
{
int n;
scanf("%d", &n); //测试数据组数
int cnt = 0; //输出 Case #时使用
while (n--)
{
scanf("%s%s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2); //求字符串长度
int i, j, k = 0;
for (i = len1 - 1; i >= 0; i--) //将字符型转化为数字
{
a[k++] = str1[i] - '0';
}
k = 0;
for (j = len2 - 1; j >= 0; j--)
{
b[k++] = str2[j] - '0';
}
k = len1 > len2 ? len1 : len2; //求和
for (j = 0; j < k; j++)
{
a[j] += b[j];
if (a[j] >= 10)
{
a[j] -= 10;
a[j + 1] += 1;
}
}
bool flag = false;
printf("Case %d:\n", ++cnt); //输出
printf("%s + %s = ", str1, str2);
if (a[k] == 0)
{
for (i = k - 1; i >= 0; i--)
{
if(!flag&&a[i]==0) continue;
else{
printf("%d", a[i]);
flag = true;
}
}
}
else
{
for (i = k; i >= 0; i--)
{
if(!flag&&a[i]==0) continue;
else{
printf("%d", a[i]);
flag = true;
}
}
}
printf("\n");
if(n!=0) printf("\n");
}
return 0;
}

浙公网安备 33010602011771号