hdoj 1002 本人测试的数都是对的 可是总是WA 求高手指点啊!

C++语言 码拜 7年前 (2015-11-12) 729次浏览
问题描述
本人有一个非常简单的问题。由于两个整数A和B,你的任务是计算A + B的总和

输入
在输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。那么T线跟随,每行包含两个正整数,A和B请注意,这个整数是非常大的,这意味着你不应该使用32位的整数处理。你可以假设每个整数的长度不会超过1000。

输出
对于每个测试案例,你应该输出两行。第一行是“case#:”#指的测试用例的数量。第二行是一个公式“A + B = SUM”,总和是指A + B.注意的结果有一定的空间int的方程。两个测试用例之间输出一个空行。

样例输入
2
1 2
112233445566778899 998877665544332211

样本输出
case1:
1 + 2 = 3
case2:
112233445566778899 + 998877665544332211 = 1111111111111111110
以下是代码,本人测试过了 答案真的没问题呀。
#include<iostream>
#include<string>
using namespace std;
int main(){
char a[1001],b[1001];
int lena ,lenb,len,n,c=1,a1[1001],a2[1001],b1[1001];
cin>>n;
while(n–){
cin>>a>>b;
lena=strlen(a);
lenb=strlen(b);
//求他们最大的字符长度
len=lena>=lenb?lena:lenb;
//将a 和b 的值逆序赋值给a1,b1
for (int i = 0; i < lena; i++)
{
a1[i]=a[lena-1-i]-“”0″”;
}
for (int i = 0; i < lenb; i++)
{
b1[i]=b[lenb-1-i]-“”0″”;
}
//不足最长位的数进行最高位补零,为了最高位的进位在len+1位上填0
for (int i = lena; i <= len; i++)
{
a1[i]=0;
}
for (int i = lenb; i <= len; i++)
{
b1[i]=0;
}
//进行对应位数相加
for (int i = 0; i <= len; i++)
{
a2[i]=a1[i]+b1[i];
}
//判断能否有进位,有的加后一位加一
for (int i = 0; i < len; i++)
{
if(a2[i]>=10)
{a2[i+1]=a2[i+1]+1;
a2[i]=a2[i]%10;
}
}
//结果输出:
cout<<“Case “<<c<<“:”<<endl;
c++;
for (int i = 0; i < lena; i++)
{
cout<<a1[i];
}
cout<<” “<<“+”<<” “;
for (int i = 0; i < lenb; i++)
{
cout<<b1[i];
}
cout<<” “<<“=”<<” “;
//假如最高位有进位的话输出
if(a2[len]>0)
cout<<a2[len];
for (int i = len-1; i >=0; i–)
{
cout<<a2[i];
}
cout<<endl;
if(n>0)
cout<<endl;
}
return 0;
}

解决方案:100分
LZ在输出结果时输出了逆序的输入数据。
如下修改可AC:

    for (int i = 0; i < lena; i++)
    {
      cout<<a[i]; //改 cout<<a1[i];
    }
    cout<<" "<<"+"<<" ";
    for (int i = 0; i < lenb; i++)
    {
      cout<<b[i]; //改 cout<<b1[i];
    }

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明hdoj 1002 本人测试的数都是对的 可是总是WA 求高手指点啊!
喜欢 (0)
[1034331897@qq.com]
分享 (0)