1451 加法的进位(二)
时间限制 : 2000/1000 MS(Java/Others) | 内存限制 :65536/32768 KB(Java/Others)
提交数 : 5355 | 通过数 : 737
题目描述
小学生在学多位数的加法时,是将两个加数右对齐,然后从右往左一位一位地加。多位数的加法经常会有进位
,如果对齐的两位相加结果大于或等于10就向左边一位进一。任务是:给定两个加数,统计进位的次数。
输入要求
输入的每一行是两个无符号整数,不超过20位。最后一行为两个0,表示输入结束。
输出要求
对每一行(最后一行除外)的两个加数,计算它们进行加法运算时进位的次数并输出。
输入样例
123 456 555 555 123 594 0 0
输出样例
0 carry operation(s) 3 carry operation(s) 1 carry operation(s)
#include<bits/stdc++.h>
using namespace std;
int add(vector<int> &A,vector<int> &B)
{int t=0,sum=0;for(int i=0;i<A.size()||i<B.size();i++){if(i<A.size()) t+=A[i];if(i<B.size()) t+=B[i];if(t>=10){sum++;}t/=10;}return sum;
}
int main()
{string a,b;while(cin>>a>>b){if(a=="0"&&b=="0")break;vector<int> A,B;for(int i=a.size()-1;i>=0;i--)A.push_back(a[i]-'0');for(int i=b.size()-1;i>=0;i--)B.push_back(b[i]-'0');int c=add(A,B);printf("%d carry operation(s)\n",c);}return 0;
}