博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题目1471: A+B without carry
阅读量:4104 次
发布时间:2019-05-25

本文共 3070 字,大约阅读时间需要 10 分钟。

题目描述

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-3-25*   作者:SJF0115*   题号: 题目1471: A+B without carry*   来源:http://acmclub.com/problem.php?id=1471*   结果:AC*   来源:2013年浙江大学复试机试模拟题*   总结:**********************************/#include
#include
#include
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
#include
#include
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了好几次.........

这种方法很有意思,自己没有想到.........

#include 
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;}

转载地址:http://iucsi.baihongyu.com/

你可能感兴趣的文章