杭电acm1002到底是怎么回事,在vc6.0上运行的已经符合他的要求,可是就是通不过。。。
#include<iostream>usingnamespacestd;structnode{charp[1000];inttop;};structre{intp[100...
#include <iostream>
using namespace std;
struct node
{
char p[1000];
int top;
};
struct re
{
int p[1001];
int top;
};
int main()
{
int n,a='1'-1;
node *f1,*f2;
re *r;
cin>>n;
f1=new node[n];
f2=new node[n];
r=new re[n];
for(int i=0;i<n;i++)
cin>>f1[i].p>>f2[i].p;
for(i=0;i<n;i++)
for(int j=0;j<1001;j++)
r[i].p[j]=0;
for(i=0;i<n;i++)
{
r[i].top=-1;
f1[i].top=strlen(f1[i].p)-1;
f2[i].top=strlen(f2[i].p)-1;
for(;f1[i].top>=0;)
{
r[i].top+=1;
if(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a>=10)
{
r[i].p[r[i].top]=(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a)%10;
r[i].p[r[i].top+1]=(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a)/10;
}
else
r[i].p[r[i].top]=r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a;
f1[i].top--;
f2[i].top--;
}
}
for(i=0;i<n-1;i++)
{
cout<<"Case "<<i+1<<":"<<endl;
cout<<f1[i].p<<" + "<<f2[i].p<<" = ";
for(int j=r[i].top;j>=0;j--)
cout<<r[i].p[j];
cout<<endl<<endl;
}
cout<<"Case "<<i+1<<":"<<endl;
cout<<f1[i].p<<" + "<<f2[i].p<<" = ";
for(int j=r[i].top;j>=0;j--)
cout<<r[i].p[j];
cout<<endl;
return 0;
} 展开
using namespace std;
struct node
{
char p[1000];
int top;
};
struct re
{
int p[1001];
int top;
};
int main()
{
int n,a='1'-1;
node *f1,*f2;
re *r;
cin>>n;
f1=new node[n];
f2=new node[n];
r=new re[n];
for(int i=0;i<n;i++)
cin>>f1[i].p>>f2[i].p;
for(i=0;i<n;i++)
for(int j=0;j<1001;j++)
r[i].p[j]=0;
for(i=0;i<n;i++)
{
r[i].top=-1;
f1[i].top=strlen(f1[i].p)-1;
f2[i].top=strlen(f2[i].p)-1;
for(;f1[i].top>=0;)
{
r[i].top+=1;
if(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a>=10)
{
r[i].p[r[i].top]=(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a)%10;
r[i].p[r[i].top+1]=(r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a)/10;
}
else
r[i].p[r[i].top]=r[i].p[r[i].top]+(int)(f1[i].p[f1[i].top]+f2[i].p[f2[i].top])-2*a;
f1[i].top--;
f2[i].top--;
}
}
for(i=0;i<n-1;i++)
{
cout<<"Case "<<i+1<<":"<<endl;
cout<<f1[i].p<<" + "<<f2[i].p<<" = ";
for(int j=r[i].top;j>=0;j--)
cout<<r[i].p[j];
cout<<endl<<endl;
}
cout<<"Case "<<i+1<<":"<<endl;
cout<<f1[i].p<<" + "<<f2[i].p<<" = ";
for(int j=r[i].top;j>=0;j--)
cout<<r[i].p[j];
cout<<endl;
return 0;
} 展开
2个回答
展开全部
首先做ACM的题不要使用VC,VC有很多地方与ACM承认的G++和GCC有很大差别,就算是杭电和POJ的C++编译器也和VC有一定差异。如果玩ACM使用VC,那么可以肯定的是在以后的比赛和练习中会吃很大亏。因此就不要使用VC了。你的代码实际上存在不少问题,你试试 99 和 2这组数据吧,你的结果有问题,就是说在加法进位时处理有问题。你再仔细检查一下还有就是输出没有必要等到最后一起输出,ACM评测时输出是单独存在于一个文件中,因此可以一组数据输出一次。最后要说的是样例数据不是那种特殊的关键数据,因此样例数据通过不代表你的代码一定能AC,ACM一道题的评测可能会有上万个数据。你仔细检查一下细节问题,尤其是在进位方面的处理
展开全部
只要输入一对就打印一个结果就行了,结果好像有问题额
1
112233445566778899 998877665544332211
Case 1:
112233445566778899 + 998877665544332211 = 111111111111111110
Press any key to continue
没进位!!!
下面是通过的代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,j;
scanf("%d",&n);
if(n<1||n>20)
return 0;
for(j=0;j<n;j++)
{
int a[1200]={0},b[1200]={0},c[1200]={0},i,ka,kb,k;
char a1[1200],b1[1200];
scanf("%s",a1);
ka=strlen(a1);
for(i=0;i<ka;i++)
a[i]=a1[ka-i-1]-'0';
scanf("%s",b1);
kb=strlen(b1);
for(i=0;i<kb;i++)
b[i]=b1[kb-i-1]-'0';
if(ka>kb)
k=ka;
else
k=kb;
for(i=0;i<k;i++)
c[i]=a[i]+b[i];
for(i=0;i<k;i++)
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
printf("Case %d:\n",j+1);
printf("%s + %s = ",a1,b1);
if(c[k]==0)
k--;
for(i=k;i>=0;i--)
printf("%d",c[i]);
if(j==n-1)
printf("\n");
else
printf("\n\n");
}
return 0;
}
1
112233445566778899 998877665544332211
Case 1:
112233445566778899 + 998877665544332211 = 111111111111111110
Press any key to continue
没进位!!!
下面是通过的代码
#include<stdio.h>
#include<string.h>
int main()
{
int n,j;
scanf("%d",&n);
if(n<1||n>20)
return 0;
for(j=0;j<n;j++)
{
int a[1200]={0},b[1200]={0},c[1200]={0},i,ka,kb,k;
char a1[1200],b1[1200];
scanf("%s",a1);
ka=strlen(a1);
for(i=0;i<ka;i++)
a[i]=a1[ka-i-1]-'0';
scanf("%s",b1);
kb=strlen(b1);
for(i=0;i<kb;i++)
b[i]=b1[kb-i-1]-'0';
if(ka>kb)
k=ka;
else
k=kb;
for(i=0;i<k;i++)
c[i]=a[i]+b[i];
for(i=0;i<k;i++)
if(c[i]>=10)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
printf("Case %d:\n",j+1);
printf("%s + %s = ",a1,b1);
if(c[k]==0)
k--;
for(i=k;i>=0;i--)
printf("%d",c[i]);
if(j==n-1)
printf("\n");
else
printf("\n\n");
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询