#include <stdio.h>
#include <string.h>
int main()
{
char a[1000]={0};
char b[1000]={0},c[1001]={0},t;
int i,n,j,k,m,la,lb;
while(scanf("%d",&n)!=EOF)
{
if(n<=20&&n>=1)
{
for(m=0;m<n;m++)
{
scanf("%s %s",&a,&b);
la=strlen(a);
lb=strlen(b);
if(la>lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0) c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
if(j>=0)
{
if(c[i+1]<10)
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
if(j<0) {
t=a[i]-'0';
c[i+1]=t+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else {c[i+1]=c[i+1]+'0';
k=0;}
}
if(i==0&&k==1) c[i]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
}
else if(la==lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0) c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
c[0]='0'+k;
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else //if(c[0]!='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}}
else
{ k=0;
for(i=la-1,j=lb-1;j>=0;i--,j--)
{
if(i>=0) c[j+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[j+1]>=10)
{ c[j+1]=c[j+1]-10+'0';
k=1;
}
if(i>=0)
{ if(c[j+1]<10)
{ k=0;
c[j+1]=c[j+1]+'0';
} }
if(i<0)
{t=b[j]-'0';
c[j+1]=t+k;
if(c[j+1]>=10)
{
c[j+1]=c[j+1]-10+'0';
k=1;}
else {c[j+1]=c[j+1]+'0';
k=0;}
}
if(j==0&&k==1) c[j]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=1;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=0;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
}}}
else break;
}
return 0;
}
我也不想}}}这样的啊,可是,这个百度提交问题的时候,限制了字数,我只能省略不换行了啊。 我这个题,数据,我感觉没啥问题。。因为我很详细的测试了下。。
杭电acm1002
答案:3 悬赏:30 手机版
解决时间 2021-01-28 19:14
- 提问者网友:贪了杯
- 2021-01-27 19:25
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-01-27 19:31
这是修改后的程序,终于传上来了。提交过了
你原来的程序给你一组测试数据: 12345 45你看一下对不对
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000]={0};
char b[1000]={0},c[1000]={0},t;
int i,n,j,k,m,la,lb;
while(scanf("%d",&n)!=EOF)
{
if(n<=20&&n>=1)
{
for(m=0;m<n;m++)
{
for(i=0;i<1000;++i)
c[i]='0';
scanf("%s %s",&a,&b);
la=strlen(a);
lb=strlen(b);
if(la>lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0)
{
c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
if(c[i+1]<10)
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
if(j<0) {
t=a[i]-'0';
c[i+1]=t+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else {
c[i+1]=c[i+1]+'0';
k=0;
}
}
if(i==0&&k==1) c[i]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
}
else if(la==lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0)
{
c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
}
c[0]='0'+k;
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else //if(c[0]!='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
}
else
{
k=0;
for(i=la-1,j=lb-1;j>=0;i--,j--)
{
if(i>=0)
{
c[j+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[j+1]>=10)
{ c[j+1]=c[j+1]-10+'0';
k=1;
}
if(c[j+1]<10)
{ k=0;
c[j+1]=c[j+1]+'0';
}
}
if(i<0)
{
t=b[j]-'0';
c[j+1]=t+k;
if(c[j+1]>=10)
{
c[j+1]=c[j+1]-10+'0';
k=1;
}
else {
c[j+1]=c[j+1]+'0';
k=0;
}
}
if(j==0&&k==1) c[j]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=1;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=0;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
}
}
}
else break;
}
return 0;
}
你原来的程序给你一组测试数据: 12345 45你看一下对不对
#include <stdio.h>
#include <string.h>
int main()
{
char a[1000]={0};
char b[1000]={0},c[1000]={0},t;
int i,n,j,k,m,la,lb;
while(scanf("%d",&n)!=EOF)
{
if(n<=20&&n>=1)
{
for(m=0;m<n;m++)
{
for(i=0;i<1000;++i)
c[i]='0';
scanf("%s %s",&a,&b);
la=strlen(a);
lb=strlen(b);
if(la>lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0)
{
c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
if(c[i+1]<10)
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
if(j<0) {
t=a[i]-'0';
c[i+1]=t+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else {
c[i+1]=c[i+1]+'0';
k=0;
}
}
if(i==0&&k==1) c[i]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
}
else if(la==lb)
{
k=0;
for(i=la-1,j=lb-1;i>=0;i--,j--)
{
if(j>=0)
{
c[i+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[i+1]>=10)
{
c[i+1]=c[i+1]-10+'0';
k=1;
}
else
{
k=0;
c[i+1]=c[i+1]+'0';
}
}
}
c[0]='0'+k;
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=1;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
else //if(c[0]!='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(i=0;i<=la;i++)
printf("%c",c[i]);
printf("\n");
if(m+1<n) printf("\n");
}
}
else
{
k=0;
for(i=la-1,j=lb-1;j>=0;i--,j--)
{
if(i>=0)
{
c[j+1]=(a[i]-'0')+(b[j]-'0')+k;
if(c[j+1]>=10)
{ c[j+1]=c[j+1]-10+'0';
k=1;
}
if(c[j+1]<10)
{ k=0;
c[j+1]=c[j+1]+'0';
}
}
if(i<0)
{
t=b[j]-'0';
c[j+1]=t+k;
if(c[j+1]>=10)
{
c[j+1]=c[j+1]-10+'0';
k=1;
}
else {
c[j+1]=c[j+1]+'0';
k=0;
}
}
if(j==0&&k==1) c[j]='1';
}
if(c[0]=='0')
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=1;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
else
{
printf("Case %d:\n",m+1);
printf("%s + %s = ",a,b);
for(j=0;j<=lb;j++)
printf("%c",c[j]);
printf("\n");
if(m+1<n) printf("\n");
}
}
}
}
else break;
}
return 0;
}
全部回答
- 1楼网友:撞了怀
- 2021-01-27 20:20
//难度在于解决大数运算的方法和实际操作中
#include <stdio.h>
#include <stdlib.h>
#define DIV 4
#define NUMLONG 1000
#define TMAX 20
short deadd[TMAX]={0};
short flag=0;
int ChangetoNum(char * pstr,short * pnum,short now)
{
short ca=0,cb=3;
char divstr[DIV+1];
divstr[DIV]='\0';
if(*pstr=='-')
{
deadd[now]++;
pstr++;
}
while(pstr[ca]!='\0') ca++;
pnum[0]=ca-ca%DIV;
if(pnum[0]==0)//判断是否不足一个保存单元
pnum[0]=1;
else if(pnum[0]==ca)//判断是否没有零碎的保存单元
pnum[0]=(ca-ca%DIV)/DIV;
else
pnum[0]=(ca-ca%DIV)/DIV+1;
//pnum[0]保存数字的保存长度
pnum++;;
while((ca--)>=0)
{
if(cb<0)
{
*pnum=(short)atoi(divstr);//分段字符串转换为数字
pnum++;
cb=3;
divstr[cb--]=pstr[ca];
}
else if(ca<0 && cb<3)//无法合成一整段的字符串转换
{
while(cb>=0)
divstr[cb--]='0';
*pnum=(short)atoi(divstr);
}
else
divstr[cb--]=pstr[ca];
}
return 0;
}
int Calculate(short *pnum1,short *pnum2,short *pans)
{
short ca,n,temp;
if(pnum1[0]<pnum2[0])
n=pnum2[0];
else
n=pnum1[0];
for(ca=1;ca<=n;ca++)
{
temp=pnum1[ca]+pnum2[ca]+pans[ca];
if(temp>=10000)//结果数字有进位
{
pans[ca]=temp-10000;
pans[ca+1]=1;
pans[0]=ca+1;
}
else
pans[ca]=temp;
}
pans[0]=pans[0]<=n?n:pans[0];
return 0;
}
int Calculate2(short *pnum1,short *pnum2,short *pans)//pnum1为大数
{
short ca,n,temp;
n=pnum1[0];
pans[0]=n;
for(ca=1;ca<=n;ca++)
{
temp=pnum1[ca]-pnum2[ca]-pans[ca];
if(temp==0 && ca==n)
pans[0]=n-1;
if(temp<0)//结果数字要退位
{
if(pnum1[ca+1]>0)
{
pans[ca]=temp+10000;
pans[ca+1]=1;
}
}
else
pans[ca]=temp;
}
return 0;
}
int PrintAns(char *pleft,char *pright,short *pans,short ca)
{
short cb,temp;
printf("Case %d:\n",ca);
printf("%s + %s = ",pleft,pright);
if(flag==1) //首单元输出特殊化
printf("%d",-pans[pans[0]]);
else
printf("%d",pans[pans[0]]);
for(ca=pans[0]-1;ca>=1;ca--)
{
if(pans[ca]>=1000)//4位全满
printf("%d",pans[ca]);
else
{
//if(ca<pans[0])//判断是否为第一个单元
{
temp=pans[ca];
for(cb=0;temp>0;cb++)//输出数字中间的0
temp/=10;
for(;cb<4;cb++)
printf("0");
}
if(pans[ca]!=0) printf("%d",pans[ca]);//当此单元为0时,0已经输出完毕,就不用再输出了
}
}
printf("\n");
return 0;
}
short WhoBig(short *pnum1,short *pnum2)
{
short ca;
if(pnum1[0]>pnum2[0])
return 1;
else
if(pnum1[0]<pnum2[0])
return -1;
for(ca=pnum1[0];ca>=1;ca--)
{
if(pnum1[ca]==pnum2[ca])
continue;
if(pnum1[ca]>pnum2[ca])
return 1;
else
return -1;
}
return 0;
}
int main()
{
short n,ca,big;
char strleft[TMAX][NUMLONG+1],strright[TMAX][NUMLONG+1];
short numleft[TMAX][NUMLONG/DIV]={0},numright[TMAX][NUMLONG/DIV]={0};
short ans[TMAX][NUMLONG/DIV]={0};
scanf("%d",&n);
ca=0;
while(ca<n && scanf("%s %s",strleft[ca],strright[ca])==2)
{
ChangetoNum(strleft[ca],numleft[ca],ca);//正正为3,正负为4,负正为1,负负为2
if(deadd[ca]==0)
deadd[ca]=3;
ChangetoNum(strright[ca],numright[ca],ca);
ca++;
}//while输入数据
for(ca=0;ca<n;ca++)
{
switch(deadd[ca])
{
case 3:
Calculate(numleft[ca],numright[ca],ans[ca]);
flag=0;
break;
case 2:
Calculate(numleft[ca],numright[ca],ans[ca]);
flag=1;
break;
case 4:
case 1:
big=WhoBig(numleft[ca],numright[ca]);
if(big==0)
{
printf("Case %d:\n",ca+1);
printf("%s + %s = 0\n",strleft[ca],strright[ca]);
continue;
}
else
if(big==1)//左边的数大于右边的数
{
Calculate2(numleft[ca],numright[ca],ans[ca]);
if(deadd[ca]==4)//正负
flag=0;
else
if(deadd[ca]==1)//负正
flag=1;
}
else
if(big==-1)//右边的数大于左边的数
{
Calculate2(numright[ca],numleft[ca],ans[ca]);
if(deadd[ca]==4)//正负
flag=1;
else
if(deadd[ca]==1)//负正
flag=0;
}
break;
}
PrintAns(strleft[ca],strright[ca],ans[ca],ca+1);
if(ca!=n-1)
printf("\n");
}//for处理数据
return 0;
}
止水2010,不会就问。。。
- 2楼网友:一袍清酒付
- 2021-01-27 20:15
int main() { int t; int len1;=10) { sum[i]-=10,&bb); len1=strlen(aa); len2=strlen(bb); for(i=0;i< sum[i+1]++; } } if(outp==1) printf("\,len2; int num; int i,j; int sop; int outp;,aa; for(i=0; for(i=len1-1,j=0;i>i++) { sum[i]+=a[i]+b[i]; if(sum[i]> scanf(" for(i=len2-1,j=0;i>%d\n" sop=0;i<1005;string.h> int sum[1010],&aa; char bb[1010];0"); printf("%s + %s = ",bb); int b[1010]; int a[1010];n"); outp=1; else if(sum[i]!=0) { sop=1; printf(" printf("case %d:\高精度…… 你的代码我改了一下 出现了比wa高级一点的错误 tle 你没有注意要求 是两行之间需要空行 最后 最前 不能有空行 在hdoj这个算wa不是pe……呵呵 我也吃过亏 至于tle 我就不管了; while(t--) { num++; scanf("%s%s"。高精度版本太多…… my code here #include=0;i--,j++) b[j]=bb[i]-'0',num); printf(" #include<1010;i++) a[i]=b[i]=sum[i]=0;,sum[i]); } } if(sop==0) printf(",sum[i]);\n" char aa[1010];,&t); num=0; outp=0; } return 0; for(i=1002;i>=0;i--,j++) a[j]=aa[i]-'0';n";);=0;i--) { if(sop==1) printf("%d";%d",应该是算法问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯