算法主要解决的是用户输入的整数过大而溢出造成的问题。解决办法就是将输入的整数字符串转换到整型数组中,加大型的整数装换为一个一个的为数相加,在逐一打印出来。
以下为代码:
1 #include <stdio.h> 2 #include<string.h> 3 #define MAXN 1000 4 int numberA[MAXN], numberB[MAXN], getResult[MAXN]; 5 char chnumA[MAXN], chnumB[MAXN]; 6 // 得到两个输入整数最大的长度 7 int getLength() 8 { 9 int lenA, lenB; 10 lenA = strlen(chnumA); 11 lenB = strlen(chnumB); 12 if (lenA >= lenB) 13 return lenA; 14 else 15 return lenB; 16 } 17 18 // 初始化整型数组 19 void init(char *a, int *b) 20 { 21 for (int i = strlen(a) - 1, j = 0; i >= 0; i--, j++) 22 { 23 b[j] = a[i] - '0'; 24 } 25 } 26 27 // 两个整形数组祝逐项相加,将结果付给接收的整形数组 28 int add() 29 { 30 int len = getLength(); 31 // 进位数值 32 int tem = 0, i = 0; 33 for (i = 0; i < len; i++) 34 { 35 int sum = numberA[i] + numberB[i] + tem; 36 getResult[i] = sum % 10; 37 tem = sum / 10; 38 } 39 // 如果进位超出了长度范围 40 len = i; 41 while (tem) 42 { 43 getResult[len++] = tem % 10; 44 tem /= 10; 45 } 46 return len; 47 } 48 49 int main() 50 { 51 int count; 52 printf("请输入要实验的次数:"); 53 scanf("%d", &count); 54 for (int i = 0; i < count; i++) 55 { 56 printf("请输入要两个整数:"); 57 scanf("%s %s", chnumA, chnumB); 58 init(chnumA, numberA); 59 init(chnumB, numberB); 60 int len = add(); 61 printf("%s + %s = ", chnumA, chnumB); 62 for (int i = len - 1; i >= 0; i--) 63 { 64 printf("%d", getResult[i]); 65 } 66 printf("\n"); 67 } 68 printf("测试结束"); 69 }