注册 登录
编程论坛 C++教室

实在没办法了 只好贴全代码上来了!为什么就是通不过呢。。

song_gpqg 发布于 2007-03-16 23:00, 562 次点击

题目是求几个100位以内的数的加法,遇到0结束,输出结果
测试了几组数都可以,可是在POJ上就是通不过。。不知道为什么。。
我写的太混乱了。。谢谢各位的耐心。。

#include<iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char a[100][101];
int b[102];
int i=0,n,q=0,m,j,len=0,lenm;//q进位

for(m=0;m<102;m++) b[m]=0;
for(m=0;m<100;m++)
for(j=0;j<102;j++) a[m][j]='0';
do
{
scanf("%s" ,a[i]);
i++;
}while(strcmp(a[i-1],"0")!=0 );//读入

for(m=0;m<i;m++)
{
if(len<=strlen(a[m])) len=strlen(a[m]);//找所有串里最大的长度
}
for(j=0;j<len;j++)
{

for (n=0;n<i;n++)
{ lenm=strlen(a[n]);
lenm--;

b[j]=a[n][lenm-j]-'0'+b[j];}//把每个二维数组对应的位相加

b[j]+=q;//加上进位
q=(b[j])/10;//算出进位
b[j]=b[j]%10;
}
j--;b[j]=b[j]+q*10; //求首位进位后的结果
int h=101;while(b[h]==0) h--;
for(i=h;i>=0;i--) cout<<b[i];//倒序输出
cout<<endl;

return 0;
}


[此贴子已经被作者于2007-3-16 23:12:38编辑过]

6 回复
#2
song_gpqg2007-03-16 23:37

汗我的程序。。下面的数比上面的长就不行

贴个别人的很好的给大家看一下吧。。

#include<iostream>
#include<cstring>
using namespace std;

void main()
{
char st[150];
int a[150],b[150],i,t;
for (i=1;i<150;i++)
{
a[i]=0;
b[i]=0;
}
while (cin>>st)
{
for (i=1;i<150;i++) a[i]=0;
for (i=1;i<=strlen(st);i++)
a[i]=st[strlen(st)-i]-'0';
t=0;
for (i=1;i<150;i++)
{
b[i]=t+b[i]+a[i];
t=b[i]/10;
b[i]=b[i]%10;
}
}
t=149;
while (b[t]==0) t--;
for (i=t;i>0;i--) cout<<b[i];
cout<<endl;
}

#3
song42007-03-17 00:41

自己比较一下OKAY

#4
husai2007-03-17 09:07

这个题目很不清晰的说,100以内的数相加干吗要以字符的形式输入呢?

#5
wfpb2007-03-17 13:12

for(j=0;j<len;j++)
{
for (n=0;n<i;n++)
{
// lenm=strlen(a[n]);
// lenm--;
// b[j]=a[n][lenm-j]-'0'+b[j];
//问题在这个地方,设想一下:12,123两个数,len=3,当j=2时,lenm=2时,lenm--后lenm==1,1-2==-1所以a[-1]有问题咯
//改一下就好了:
char add='0';
lenm=strlen(a[n])-1;
if(lenm>=j)
x=a[n][lenm-j];
b[j]+=(x-'0');
}//把每个二维数组对应的位相加
b[j]+=q;//加上进位
q=(b[j])/10;//算出进位
b[j]=b[j]%10;
}

#6
song_gpqg2007-03-18 01:06
是100位。。

谢谢楼上!!
#7
song_gpqg2007-03-18 12:52
回复:(wfpb)for(j=0;j
再次感谢!终于通过了!!
1