比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
标签:
比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。
输入数据有多组。首先输入一个整数T,表示有T组输入。
每组输入有两行,每行一个大整数。每个整数最多1000位。没有负数输入。
对于每组输入,输出两个整数的和,单独占一行。
1 #include <stdio.h> 2 #include <string.h> 3 #define N 1005 4 int main () 5 { 6 char ch2[N], ch1[N], a; 7 int t, i, l1, j, l2, l, flag; 8 scanf("%d", &t); 9 while(t--) 10 { 11 flag = 0; 12 char ch[N]={0}; 13 scanf(" %s", ch1); //读入两个大数; 14 scanf(" %s", ch2); 15 l1 = strlen(ch1); //求长度用来倒序 16 l2 = strlen(ch2); 17 for (i = 0; i<l1/2; i++) 18 { 19 a = ch1[i]; 20 ch1[i] = ch1[l1-i-1]; //l1-i-1是因为最后一个数据存在l-1中 21 ch1[l1-i-1] = a; 22 } 23 for (i = 0; i<l2/2; i++) 24 { 25 a = ch2[i]; 26 ch2[i] = ch2[l2-i-1]; 27 ch2[l2-i-1] = a; 28 } 29 if(ch1[0]+ch2[i]-‘0‘-‘0‘>9) //判断第一位是否进位 30 flag = 1; 31 for (i = 0, j=0; i<l1&&j<l2;i++, j++) 32 { 33 ch[i] += ch1[i]-‘0‘+ch2[j]-‘0‘+‘0‘; //ch读入的是ascll码上的值, 要进行转换; 34 if(ch[i]-‘9‘>0) 35 { 36 ch[i]-=10; 37 ch[i+1]++; 38 } 39 } 40 41 if (l1>l2) 42 { 43 for(; i<l1; i++) 44 ch[i] = ch1[i]; 45 } 46 else if(l1<l2) 47 { 48 for(; i<l2; i++) 49 ch[i] = ch2[i]; 50 } 51 l = strlen(ch); 52 for (i = 0; i<l; i++) 53 { 54 a = ch[i]; 55 ch[i] = ch[l-i-1]; 56 ch[l-i-1] = a; 57 } 58 if(flag == 1) 59 { 60 printf("1"); 61 for (i = l-2; i>=0; i--) //若进位的话要改变长度 首位是1; 62 printf("%d", ch[i]-‘0‘); 63 } 64 else 65 for (i = l-1; i>=0; i--) 66 printf("%d", ch[i]-‘0‘); 67 printf("\n"); 68 } 69 return 0; 70 }
标签:
原文地址:http://www.cnblogs.com/yishilin/p/4345410.html