谁能告诉我为什么我的程序总是得到错误的答案?它必须计算进位操作的总数。我尝试了每一个测试用例。我没有得到错误的输出。
问题描述:
孩子们被教导从右到左一次添加多位数字。许多人发现“进位”操作(即从一个数字位置携带 1 以添加到下一个数字位置)是一项重大挑战。你的工作是计算每组加法问题的进位操作次数,以便教育工作者评估他们的难度。
输入
每行输入包含两个小于 10 位的无符号整数。输入的最后一行包含 0 0。
输出
对于除最后一行之外的每一行输入,您应该计算并打印两个数字相加所产生的进位操作数,格式如下所示。
样本输入
123 456
555 555
123 594
0 0
样本输出
No carry operation.
3 carry operations.
1 carry operation.
这是我当前的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
unsigned long a, b, carry;
vector <int> v1, v2;
int index_a, index_b;
void digit(unsigned long x, unsigned long y)
{
for(int i=x; i>0; i/=10)
v1.push_back(i%10);
for(int i=y; i>0; i/=10)
v2.push_back(i%10);
}
int main()
{
while(cin>>a>>b && a!=0 && b!=0)
{
v1.clear();
v2.clear();
int carry_counter=0;
digit(a, b);
for(int j=0; j<v1.size() && j<v2.size(); j++)
{
carry=(v1[j]+v2[j]+carry)/10;
if(carry)
carry_counter++;
index_a=index_b=j;
}
for(int i=index_a; i+1<v1.size(); i++)
{
carry=(v1[i]+carry)/10;
if(carry)
carry_counter++;
}
for(int i=index_b; i+1<v2.size(); i++)
{
carry=(v2[i]+carry)/10;
if(carry)
carry_counter++;
}
if(carry_counter==1)
cout<<"1 carry operation."<<endl;
else if(carry_counter>1)
cout<<carry_counter<<" carry operations."<<endl;
else
cout<<"No carry operation."<<endl;
}
return 0;
}