UVa 10035 Primary Arithmetic
UVa 10035 Primary Arithmetic
谁能告诉我为什么我的程序总是得到错误的答案?它必须计算求和中进位操作的次数。我尝试了我能想到的每一个测试案例。我没有得到错误的输出。
问题描述:
孩子们被教导从右到左每次加一个数位。许多人发现"进位"运算——将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;
}
你的代码至少有两个bug。
错误# 1
这是您失败的测试用例
989 1
0 0
你的代码回答有2个进位操作,而实际上只有一个。问题(实际上是其中一个问题)在这几行:
for(int i=index_a; i+1<v1.size(); i++)
for(int i=index_b; i+1<v2.size(); i++)
从index_a + 1
和index_b + 1
开始,以i < v1.size()
和i < v2.size()
结束。
错误# 2
并且没有读取所有的输入!你的主循环条件应该是:
while (cin>>a>>b && (a!=0 || b!=0))
测试用例,预期输出和接收输出
为了更清楚,这里有一个测试用例:
989 1
1 989
11 0
0 11
2 3
2234 766
0 0
下面是期望的(正确的)输出:
1 carry operation.
1 carry operation.
No carry operation.
No carry operation.
No carry operation.
3 carry operations.
但是你的代码给出了这个输出(这显然是错误的):
2 carry operations.
2 carry operations.
这个测试用例呢:
5 5
11 0
99 999
0 0
?
相关文章:
- 为什么我的功能在使用 goto 时会给我带来"expected primary-expression before '}' token"?
- 如何修复此错误"expected primary expression before 'int'"?
- 使用结构和数组时的"expected primary expression before '.' token"
- 是否有MAT ARITHMETIC 运算符替代UMAT
- C++ Long arithmetic
- 如何解决这个"arithmetic exception"?
- 推导模板类重载方法的地址会导致"error: expected primary-expression before ‘decltype’"
- "error: expected primary-expression before '<=' token" 我做错了什么?
- "expected primary expression __"是什么意思?
- 海湾合作委员会的"void pointer arithmetic"确定性吗?
- 模板成员函数调用 -- "error: expected primary-expression before 'int'"
- 我的代码看起来不错。为什么我要得到"error: expected primary-expression before ')' token"?
- 如何修复"Expected Primary-expression before ')' token"错误?
- 简单继承实现中的构建错误"expected primary-expression before 'float' "来源
- C++错误"tabulate.cc:19: error: expected primary-expression before ',' token"
- 创建类的成员函数时的 C++ "Expected primary-expression before '.' token"
- "error: expected primary-expression before 'volatile'"
- 将指针传递给函数时出现"expected primary-expression before"错误
- C++ 结构和"expected primary-expression"错误
- UVa 10035 Primary Arithmetic