題目描述 Xiao Ming always tends to ignore the carry when he does decimal addition with paper and pencil.For example,15+17,Xiao Ming will answer 22,because he ignores the carry from the single digits.5+7=12,and the digit 1 is the carry. 輸入 The input will consist of a series of pairs of integers a and b(both less than 1000000000),separated by a space, one pair of integers per line. 輸出 For each pair of input integers a and b you should output the correct answer of the sum of a and b,a space character and Xiao Ming's answer of the sum of a and b in one line,and with one line of output for each line in input.If Xiao Ming's answer begins with zero,don't output unnecessary zero. 樣例輸入 15 16 1 999 31 71 樣例輸出 31 21 1000 990 102 2 提示 [+] *** 提示已隱藏,點擊上方 [+] 可顯示 *** 來源 2013年浙江大學復試機試模擬題 [cpp] /********************************* * 日期:2013-3-25 * 作者:SJF0115 * 題號: 題目1471: A+B without carry * 來源:http://acmclub.com/problem.php?id=1471 * 結果:AC * 來源:2013年浙江大學復試機試模擬題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int a,b,len1,len2,index,i,j; char str1[11],str2[11],c[11]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%s %s",str1,str2)!=EOF){ len1 = strlen(str1); len2 = strlen(str2); index = 0; //小明的計算過程 for(i = len1-1,j = len2-1;i >= 0 && j >= 0;i--,j--){ int sum = str1[i] - '0' + str2[j] - '0'; //忽略進位 if(sum > 9){ sum -= 10; } c[index++] = sum + '0'; } while(i >= 0){ c[index++] = str1[i]; i--; } while(j >= 0){ c[index++] = str2[j]; j--; } //去掉前導0 index = index -1; while(c[index] == '0' && index > 0){ index--; } //正確答案 printf("%d ",atoi(str1) + atoi(str2)); //小明的答案 for(i = index;i >= 0;i--){ printf("%c",c[i]); } printf("\n"); } return 0; } /********************************* * 日期:2013-3-25 * 作者:SJF0115 * 題號: 題目1471: A+B without carry * 來源:http://acmclub.com/problem.php?id=1471 * 結果:AC * 來源:2013年浙江大學復試機試模擬題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int a,b,len1,len2,index,i,j; char str1[11],str2[11],c[11]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%s %s",str1,str2)!=EOF){ len1 = strlen(str1); len2 = strlen(str2); index = 0; //小明的計算過程 for(i = len1-1,j = len2-1;i >= 0 && j >= 0;i--,j--){ int sum = str1[i] - '0' + str2[j] - '0'; //忽略進位 if(sum > 9){ sum -= 10; } c[index++] = sum + '0'; } while(i >= 0){ c[index++] = str1[i]; i--; } while(j >= 0){ c[index++] = str2[j]; j--; } //去掉前導0 index = index -1; while(c[index] == '0' && index > 0){ index--; } //正確答案 printf("%d ",atoi(str1) + atoi(str2)); //小明的答案 for(i = index;i >= 0;i--){ printf("%c",c[i]); } printf("\n"); } return 0; } [cpp] /********************************* * 日期:2013-3-25 * 作者:SJF0115 * 題號: 題目1471: A+B without carry * 來源:http://acmclub.com/problem.php?id=1471 * 結果:AC * 來源:2013年浙江大學復試機試模擬題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int a,b,index; int c[12]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d %d",&a,&b)!=EOF){ //正確答案 printf("%d ",a + b); //求小名的答案 if(a == 0 && b == 0){ printf("%d",a + b); } index = 0; while(a || b){ int sum = a % 10 + b % 10; if(sum > 9){ sum -= 10; } c[index++] = sum; a /= 10; b /= 10; } //去掉前導0 index = index - 1; while(c[index] == 0 && index > 0){ index--; } //輸出答案 for(int i = index;i >= 0;i--){ printf("%d",c[i]); } printf("\n"); } return 0; } /********************************* * 日期:2013-3-25 * 作者:SJF0115 * 題號: 題目1471: A+B without carry * 來源:http://acmclub.com/problem.php?id=1471 * 結果:AC * 來源:2013年浙江大學復試機試模擬題 * 總結: **********************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int a,b,index; int c[12]; //freopen("C:\\Users\\SJF\\Desktop\\acm.txt","r",stdin); while(scanf("%d %d",&a,&b)!=EOF){ //正確答案 printf("%d ",a + b); //求小名的答案 if(a == 0 && b == 0){ printf("%d",a + b); } index = 0; while(a || b){ int sum = a % 10 + b % 10; if(sum > 9){ sum -= 10; } c[index++] = sum; a /= 10; b /= 10; } //去掉前導0 index = index - 1; while(c[index] == 0 && index > 0){ index--; } //輸出答案 for(int i = index;i >= 0;i--){ printf("%d",c[i]); } printf("\n"); } return 0; } 第二種方法時忘記了a = 0 b = 0的情況wrong了好幾次......... 這種方法很有意思,自己沒有想到......... [cpp] #include <stdio.h> int a,b; void run() { int c,k; c=a+b; printf("%d ",c);//這個程序是由正常的和來反求不進位的和(或者直接按位相加也是可以的 )。 k=1; while(k<=a||k<=b) { if(a/k%10+b/k%10>9) c-=k*10;//在某一位上的進位被忽略,相當於總和減小了這一位權值的十倍,個位進位被忽略,總和就少了10。 k*=10; } printf("%d\n",c); } int main() { while(scanf("%d%d",&a,&b)!=EOF) run(); return 0; } #include <stdio.h> int a,b; void run() { int c,k; c=a+b; printf("%d ",c);//這個程序是由正常的和來反求不進位的和(或者直接按位相加也是可以的 )。 k=1; while(k<=a||k<=b) { if(a/k%10+b/k%10>9) c-=k*10;//在某一位上的進位被忽略,相當於總和減小了這一位權值的十倍,個位進位被忽略,總和就少了10。 k*=10; } printf("%d\n",c); } int main() { while(scanf("%d%d",&a,&b)!=EOF) run(); return 0; }