一道acm题目 报错是wrong answer 求大神找错

题目:
Children are taught to add multi-digit numbers from right-to-left one digit at a time. Many find the "carry" operation - in which a 1 is carried from one digit position to be added to the next - to be a significant challenge. Your job is to count the number of carry operations for each of a set of addition problems so that educators may assess their difficulty.

Each line of input contains two unsigned integers less than 10 digits. The last line of input contains 0 0. For each line of input except the last you should compute and print the number of carry operations that would result from adding the two numbers, in the format shown below.

Sample Input
123 456
555 555
123 594
0 0

Output for Sample Input
No carry operation.
3 carry operations.
1 carry operation.

作答
#include <iostream>
#include <string>
using namespace std;

int main()
{
string x,y;

while(getline(cin,x,' '),getline(cin,y)&&x!="0"||y!="0")
{

int n=x.length();
int m=y.length();
int max=(n>=m)?n:m;
int min=(n<m)?n:m;
string maxs=(n>=m)?x:y;
string mins=(n<m)?x:y;
int count=0;
int i=max;

for(i;i>0;i--)
{
if(maxs[max-1]+mins[min-1]>=106||maxs[max-1]>=58)
{
count++;
maxs[max-2]++;
max--;
min--;

}
else
{

max--;
min--;
}

}
if(count>1)
{
cout<<count<<" "<<"carry "<<"operations"<<endl;
}
else if(count==1)
{
cout<<"1 carry operation"<<endl;
}
else
{
cout<<"No carry operation"<<endl;
}

}

return 0;
}

最明显的错误,就是

No carry operation.


这些最后面都有一个句号。。你的输出没有。


这题是算有多少次进位吧,你是模拟加法运算,

if(maxs[max-1]+mins[min-1]>=106||maxs[max-1]>=58) 这些别人只能猜出来是什么意思,


maxs[max-2]++;这个百分百溢出 。当max = 1的时候  ,即原来的长度是1

没必要用字符串。

#include <iostream>
using namespace std;

int main()
{
unsigned ua, ub;
while(cin >> ua >> ub)
{
if( ua == 0 && ub == 0) break;
// 只要依次抽出最后一位,看下有没有进位就可以。
int ntimes = 0;
int nCarry = 0;
// 循环的条件 ua,ub有一个不为0 
while( ua != 0 || ub != 0)
{
unsigned a = ua % 10;
unsigned b = ub % 10;
if( a + b + nCarry >= 10)
{
nCarry = 1;
ntimes ++ ;
}
else
nCarry = 0;
if(ua == 0 && nCarry == 0) break;
if(ub == 0 && nCarry == 0) break; // 如果其中有一个为0,且没有进位,则退出
ua /= 10;
ub /= 10;
}
if( nCarry == 1)
ntimes ++;
if(ntimes == 0)
cout << "No carry operation." << endl;
else if(ntimes == 1)
cout << "1 carry operation." << endl;
else
cout << ntimes << " carry operation." << endl;

}
return  0;
}

追问

哦 超谢谢你 那程序还需要怎么改一下吗

对了 可以要你的联系方式吗 我才入门 求大神带我飞😐

温馨提示:内容为网友见解,仅供参考
无其他回答

一道acm题目 报错是wrong answer 求大神找错
最明显的错误,就是 No carry operation.这些最后面都有一个句号。。你的输出没有。这题是算有多少次进位吧,你是模拟加法运算,if(maxs[max-1]+mins[min-1]>=106||maxs[max-1]>=58) 这些别人只能猜出来是什么意思,maxs[max-2]++;这个百分百溢出 。当max = 1的时候 ,即原来的长度...

一道acm题目 报错是wrong answer 求大神找错
你的想法跟题意是不符的,并不是偶数就不消耗体力,如果输入6则6分解为3+3,每个3消耗一个体力,共消耗2体力。其实这就是道简单的动规。下面是我的代码 include <iostream> include <cstdio> include <cstring> include <cmath> define INF 0x7ffffff \/\/#define LOCAL using namespace std;int...

麻烦大神帮我看一下杭电acm2034为什么总是Wrong Answer?
麻烦大神帮我看一下杭电acm2034为什么总是Wrong Answer? \/*ProblemDescription参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是做集合的减法... \/* Problem Description 参加过上个月月赛的同学一定还记得其中的...

为什么我写的程序acm中显示是wrong answer?? 急需高人指点
你用的是c语言,最好不要在半路定义变量,那是c++的写法 第一题你的测试数据都没过怎么能交呢?\/ if(a[i]<0){ d=-a[i];} else d=a[j]; \/\/你的这里错了,应该是a[i]\/ include<stdio.h> include <math.h> int main(){ int n,i,j;int a[100],d,b,c;while(scanf("%d"...

这是一道acm题的代码,帮忙看看为什么是wrong answer
你的错误在于你的输出不对 输出是:f91(91) = 91 你的是:f(91) = 91 少了91

...acm 的题提交会总显示 WrongAnswer 是怎么回事啊?
计算机把键盘换从去清除是没有问题的。计算机运行很快,你的下一行输入会再上一行处理完之后一段时间才会被送入计算机,清除输入设备没有问题。但在ACM中,它的输入一般是通过重定向,从文件中输入的,你清除标准输入设备,会把后面所有的输入数据全部清掉,那肯定就错了。

做了道Acm题,可是总是wrong answer,能不能请大神帮我看看啊,跪求_百度...
long smallest(long x,long y){ return x*y\/bigest(x,y); } 改写成 long smallest(long x,long y){ return x\/bigest(x,y)*y \/\/先乘后除会溢出,改成先除后乘,试试}

acm简单的题 一直 wrong answer,哪位大神提点提点
1.acm一般不用float,精度不够,用double。2、system("pause"); 删掉。 3、不要用pow,才2次方,自己写就行了,pow可能会有精度问题

杭电OJ题目2034,我的答案正确却总是wrong answer
对于acm的题目,我觉得如果在自己的电脑上运行对了,提交错误,怎么找出来错误,第一,反复读题目,看自己的程序中都满足题目中的要求没有,有时候输出的形式也要注意一下,有可能是要你把所有需要输入的数据都输进去,然后在吧所有输入的处理后再输出,有可能也是输入一个就处理一个,这样的情况也有的...

...下acm Recaman's Sequence 一直提示wrong answer,错在哪里了?_百度...
输出多了一个空格,以及m=-1时没法退出。while里面条件这么写 scanf(""%d",&m)!=EOF,m>=0 试试。

相似回答
大家正在搜