首页 新闻 赞助 找找看

hdu1002

0
悬赏园豆:5 [已解决问题] 解决于 2011-12-10 19:44

#include<iostream>
#include
<string>
using namespace std;
int main()
{
int m=0;
while(cin>>m)
{
string a,b;
int i=0;
for(i=1;i<=m;++i)
{
cin
>>a>>b;
cout
<<"case"<<i<<":"<<endl;
int n1=a.length(),n2=b.length();
int n=n1>=n2?(n1+1):(n2+1);
int *c=new int[n];
int j=0,sum=0,flag=0;
--n1;
--n2;
while(n1>=0&&n2>=0)
{
sum
=a[n1--]-'0'+b[n2--]-'0'+flag;
flag
=sum>=10?1:0;
c[j
++]=sum%10;
}
while(n1>=0)
{
sum
=a[n1--]-'0'+flag;
flag
=sum>=10?1:0;
c[j
++]=sum%10;
}
while(n2>=0)
{
sum
=b[n2--]-'0'+flag;
flag
=sum>=10?1:0;
c[j
++]=sum%10;
}
c[n
-1]=flag;
cout
<<a<<" + "<<b<<" = ";
if(c[n-1]==1)
cout
<<1;
for(int j=n-2;j>=0;--j)
{
cout
<<c[j];
}
cout
<<endl<<endl;
delete []c;
}
}
}
I wnat to konw what's the problem in the code

hailong的主页 hailong | 初学一级 | 园豆:70
提问于:2010-10-22 17:29
< >
分享
最佳答案
0

1、无返回值错误。应加上return 0;或者将函数的返回值类型改为void。

2、for循环体之后应紧跟cin.clear();语句。否则当你执行完for循环之后,留在缓冲区的值仍为string型,那么当while循环进行条件判断时将出现错误而结束,造成while循环只执行一次。

建议:while循环体后也应紧跟cin.clear();以清空相应缓冲区供下次使用,否则在while循环体之后,像cin >> a;这样的语句不能执行。虽然本例中并没有发生这样的错误,但应该养成良好习惯。

3、变量j重定义。

4、你的编程习惯最好改变一下,你的代码可读性很差,良好的习惯很重要。

收获园豆:5
蒋春辉 | 菜鸟二级 |园豆:225 | 2010-11-01 19:51
但是没解决问题,晕哦
hailong | 园豆:70 (初学一级) | 2010-11-01 20:44
不可能吧,刚我运行了下,可以的。你看看是不是你的输入有问题
蒋春辉 | 园豆:225 (菜鸟二级) | 2010-11-02 12:23
我是在hdu上测试,结果wa了
hailong | 园豆:70 (初学一级) | 2010-11-04 21:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册