【菜鸟求助】ACM题目:Integer Inquiry
OneofthefirstusersofBIT'snewsupercomputerwasChipDiller.Heextendedhisexplorationofpowe...
One of the first users of BIT's new supercomputer was Chip Diller. He extended his exploration of powers of 3 to go from 0 to 333 and he explored taking various sums of those numbers.
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
Input
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
Output
Your program should output the sum of the VeryLongIntegers given in the input.
Sample Input
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
Sample Output
370370367037037036703703703670
我的写的code:
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str[300];
int temp[300]={0};
int i,j,temptag=0,flag,p,tag=0,plus;
for(i=0;;i++)
{
p=1,plus=0,flag=0;
gets(str);
for(j=0;j<strlen(str);j++)
{
if(str[j]!='0')
{
flag=1;
break;
}
}//为了像输入0123这样的数不会跳出
if(flag==0)
{
if(temp[tag+1]%10!=0)
tag++;
for(j=tag;j>=0;j--)
cout<<temp[j];
cout<<endl;
break;
}//若输入0,判断输出
for(j=0;j<strlen(str);j++)
{
temp[j]+=str[strlen(str)-p]-'0';
if(temp[j]/10==1)
{
temp[j]=temp[j]%10;
plus=1;
}
else
plus=0;//判断是否进位
while(plus!=0)
{
temp[j+plus]+=1;
if(temp[j+plus]/10==1)
{
temp[j+plus]=temp[j+plus]%10;
plus++;
}
else
plus=0;
}//进位位是否再次进位
if(j>temptag&&temp[j]!=0)
temptag=j;//最后得到的数组会有几位
p++;
}
if(tag<temptag)
tag=temptag;//最后结果位数
}
return 0;
}
Wrong Answer。。。,但测试例子结果没问题,试了试其他的输入也没问题,各位高手帮忙啊,先在此谢过!!!
一楼你说的很对,谢谢你。但是我把
if(j>temptag&&temp[j]!=0)
temptag=j;
这句改成了
temptag=strlen(str)-1;
输入:9 90 999
会输出:1098
这个问题解决了。
但仍然是WA。。。很头疼,望指教
同样感谢2楼,目前还是比较关心我是怎么错的。
另外说下1楼,你的code输入sample input的数,输出好像是错的。
我用的VC6.0。 展开
``This supercomputer is great,'' remarked Chip. ``I only wish Timothy were here to see these results.'' (Chip moved to a new apartment, once one became available on the third floor of the Lemon Sky apartments on Third Street.)
Input
The input will consist of at most 100 lines of text, each of which contains a single VeryLongInteger. Each VeryLongInteger will be 100 or fewer characters in length, and will only contain digits (no VeryLongInteger will be negative).
The final input line will contain a single zero on a line by itself.
Output
Your program should output the sum of the VeryLongIntegers given in the input.
Sample Input
123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0
Sample Output
370370367037037036703703703670
我的写的code:
#include<iostream>
#include<string>
using namespace std;
int main()
{
char str[300];
int temp[300]={0};
int i,j,temptag=0,flag,p,tag=0,plus;
for(i=0;;i++)
{
p=1,plus=0,flag=0;
gets(str);
for(j=0;j<strlen(str);j++)
{
if(str[j]!='0')
{
flag=1;
break;
}
}//为了像输入0123这样的数不会跳出
if(flag==0)
{
if(temp[tag+1]%10!=0)
tag++;
for(j=tag;j>=0;j--)
cout<<temp[j];
cout<<endl;
break;
}//若输入0,判断输出
for(j=0;j<strlen(str);j++)
{
temp[j]+=str[strlen(str)-p]-'0';
if(temp[j]/10==1)
{
temp[j]=temp[j]%10;
plus=1;
}
else
plus=0;//判断是否进位
while(plus!=0)
{
temp[j+plus]+=1;
if(temp[j+plus]/10==1)
{
temp[j+plus]=temp[j+plus]%10;
plus++;
}
else
plus=0;
}//进位位是否再次进位
if(j>temptag&&temp[j]!=0)
temptag=j;//最后得到的数组会有几位
p++;
}
if(tag<temptag)
tag=temptag;//最后结果位数
}
return 0;
}
Wrong Answer。。。,但测试例子结果没问题,试了试其他的输入也没问题,各位高手帮忙啊,先在此谢过!!!
一楼你说的很对,谢谢你。但是我把
if(j>temptag&&temp[j]!=0)
temptag=j;
这句改成了
temptag=strlen(str)-1;
输入:9 90 999
会输出:1098
这个问题解决了。
但仍然是WA。。。很头疼,望指教
同样感谢2楼,目前还是比较关心我是怎么错的。
另外说下1楼,你的code输入sample input的数,输出好像是错的。
我用的VC6.0。 展开
2个回答
展开全部
你的代码在判断最高位上有问题
比如
9
90
999
0
你的代码输出98
正确答案应该是1098
不好意思,我的代码是直接贴的下面这题AC的代码
http://acm.hdu.edu.cn/showproblem.php?pid=1047
这题一开始输入了例子个数
杠掉前三行就行了
我现在身边没有编译器,不过我估计你改了后无法避免输出前面的无效零
比如
0009
9
9
你会输出多余的0
这是我的代码
#include<stdio.h>
#include<string.h>
char s[200];
int t[200];
int n,l,i,j,ll;
bool first=1;
int main()
{
//scanf("%d",&n);
// while (n--)
{
// if (first) first=0; else
memset(t,0,sizeof t);
ll=1;
while (scanf("%s",s)==1)
{
l=strlen(s);
if (l==1&&s[0]==48) break;
for (i=l-1,j=0;i>=0;i--,j++)
{
t[j]+=s[i]-48;
if (t[j]>9)
{
t[j]-=10;
t[j+1]++;
}
}
while (t[j]>0)
{
if (t[j]>9)
{
t[j]-=10;
t[j+1]++;
}
j++;
}
if (j>ll) ll=j;
}
while (j>1&&t[j-1]==0) j--;
for (i=ll-1;i>=0;i--) printf("%d",t[i]);
printf("\n");
}
}
比如
9
90
999
0
你的代码输出98
正确答案应该是1098
不好意思,我的代码是直接贴的下面这题AC的代码
http://acm.hdu.edu.cn/showproblem.php?pid=1047
这题一开始输入了例子个数
杠掉前三行就行了
我现在身边没有编译器,不过我估计你改了后无法避免输出前面的无效零
比如
0009
9
9
你会输出多余的0
这是我的代码
#include<stdio.h>
#include<string.h>
char s[200];
int t[200];
int n,l,i,j,ll;
bool first=1;
int main()
{
//scanf("%d",&n);
// while (n--)
{
// if (first) first=0; else
memset(t,0,sizeof t);
ll=1;
while (scanf("%s",s)==1)
{
l=strlen(s);
if (l==1&&s[0]==48) break;
for (i=l-1,j=0;i>=0;i--,j++)
{
t[j]+=s[i]-48;
if (t[j]>9)
{
t[j]-=10;
t[j+1]++;
}
}
while (t[j]>0)
{
if (t[j]>9)
{
t[j]-=10;
t[j+1]++;
}
j++;
}
if (j>ll) ll=j;
}
while (j>1&&t[j-1]==0) j--;
for (i=ll-1;i>=0;i--) printf("%d",t[i]);
printf("\n");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询