用了最笨的方法一个一个情况列出来,但提交一直不过,找不到bug,最后终于找到了!!!
小学生算术
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
1
-
描述
- 很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个三位数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。
-
输入
- 输入两个正整数m,n.(m,n,都是三位数) 输出
- 输出m,n,相加时需要进位多少次。 样例输入
-
123 456 555 555 123 594 0 0
样例输出
-
0 3
1
-
-
你的错误代码:
-
#include <bits/stdc++.h> using namespace std; int main() { int x,y,a[3],b[3],i,m,n; while(scanf("%d%d",&x,&y)!=EOF,x||y) { m=x; n=y; for(i=0;i<3;++i) { a[i]=x%10; x=x/10; b[i]=y%10; y=y/10; } if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-10>=10&&a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-20>=10) cout<<"3"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-10>=10&&a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-20<10) cout<<"2"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-10<10&&a[2]+b[2]>=10) cout<<"2"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]>=10&&a[2]+b[2]+a[1]+b[1]-10>=10) cout<<"2"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-10<10&&a[2]+b[2]<10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]>=10&&a[2]+b[2]+a[1]+b[1]-10<10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]<10&&a[2]+b[2]>=10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]<10&&a[2]+b[2]<10) cout<<"0"<<endl; } return 0; }
最终的正确代码:
-
#include <bits/stdc++.h> using namespace std; int main() { int x,y,a[3],b[3],i,m,n; while(scanf("%d%d",&x,&y)!=EOF,x||y) { for(i=0;i<3;++i) { a[i]=x%10; x=x/10; b[i]=y%10; y=y/10; } if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-9>=10&&a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-18>=10) cout<<"3"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-9>=10&&a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-18<10) cout<<"2"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-9<10&&a[2]+b[2]>=10) cout<<"2"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]>=10&&a[2]+b[2]+a[1]+b[1]-9>=10) cout<<"2"<<endl; if(a[0]+b[0]>=10&&a[1]+b[1]+a[0]+b[0]-9<10&&a[2]+b[2]<10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]>=10&&a[2]+b[2]+a[1]+b[1]-9<10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]<10&&a[2]+b[2]>=10) cout<<"1"<<endl; if(a[0]+b[0]<10&&a[1]+b[1]<10&&a[2]+b[2]<10) cout<<"0"<<endl; } return 0; }
-
错误的地方:
a[1]+b[1]+a[0]+b[0]-10>=10
-
a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-20>=10)
这是错误错误错误的!!!!!
-
正确的应该是:
-
a[1]+b[1]+a[0]+b[0]-9>=10
a[2]+b[2]+a[1]+b[1]+a[0]+b[0]-18>=10
当一个位达到10的时候10-10=0,可实际是满10进1!即判断进不进的条件是看两数的这一位相加是否大于10,可进位却是是满10进1,而不是拿减去10的部分进位,比如刚好满10,进的却不是10-10=0,而是10-9=1!
-
就是错在这里!!!
-