呃,先说说思路吧,大数相加肯定就不能用int,float,double,long....应该用char数组
比较两个数组的长短,从尾部开始相加,大于10就减去10。有一个情况需要注意下,当数组长度相等时,首位元素大于10的处理
还有一个问题需要考虑,前导0的问题,数组前面为无效0的时候,例如00006 + 05 = 11,而不是00011。
#include<stdio.h>
#include<string.h>
void achieveSum(int len_a, int len_b, char * a, char * b)
{
int i, j;
for (i = len_a - len_b, j = 0; i < len_a; i++) {
a[i] += b[j++];
}
for (int i = len_a-1; i >= 0; i--) {
if (a[i] > 9) { //逢10下一位进1
a[i] = a[i] - 10;
a[i-1]++;
}
}
for (j = 0; j < len_a; j++) { //去无效0
if (a[j] != 0)
break;
}
for (int i = j; i < len_a; i++) {
printf("%d", a[i]);
}
}
void sum(char * a, char * b)
{
int len_a, len_b, j;
len_a = strlen(a);
len_b = strlen(b);
for (int i = 0; i < len_a; i++) { ////字符转整型
a[i] = a[i] - '0';
}
for (int i = 0; i < len_b; i++) {
b[i] = b[i] - '0';
}
/*这里判断哪个字符串长,把短的字符串加到长的字符串上*/
if (len_a > len_b) {
achieveSum(len_a, len_b, a, b);
} else {
achieveSum(len_b, len_a, b, a);
}
}
int main(void)
{
char a[1005], b[1005], count = 1;
int len_a, len_b, temp, j, T;
scanf("%d", &T);
for (int i = 1; i <= T; i++) {
scanf("%s %s", a, b);
len_a = strlen(a);
len_b = strlen(b);
j = 0;
printf("Case %d:\n", count++);
printf("%s + %s = ", a, b);
sum(a, b);
if(i != T) {
printf("\n\n");
}else{
printf("\n");
}
}
return 0;
}