1002

来源:互联网 发布:云计算运维工程师待遇 编辑:程序博客网 时间:2024/06/01 10:50

1002高精度 加法例题,格式方面有空格 空行要求 输出的最后一行不要有空行

注:之前用dev c++ 编译成功 提交到OJ系统选择C语言编译错误(Compilation Error)  参照网上的方法用C++提交 编译通过;

     不明白为什么,大概是一些函数C不支持的原因吧

Problem : 1002 ( A + B Problem II )     Judge Status : Wrong Answer
RunId : 21581341    Language : C++    Author : jim0912
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
1.WA主要原因没有case #:格式 printf("Case %d:\n",ii+1);

2.没有初始化 C[1000] 数组 
 memset (c,0,sizeof(c)); 
3.最后一行不能为空行 if (ii<tot-1) printf("\n");

#include <stdio.h>#include <string.h> int main(){    int tot,ii,i,j,k,e,lena,lenb,lenc,r;    char tmp,a[1000],b[1000],c[1000];    scanf("%d",&tot);    for(ii=0;ii!=tot;ii++){    scanf ("%s%s",&a,&b);    lena=strlen(a);    lenb=strlen(b);    for (i=0;i!=lena;i++)         printf("%c",a[i]);        printf(" + ");            for (i=0;i!=lenb;i++)         printf("%c",b[i]);        printf(" = ");    for (i=0;i<int(lena/2);i++){         tmp=a[lena-1-i];        a[lena-1-i]=a[i];        a[i]=tmp;    }    for (j=0;j<int(lenb/2);j++){        tmp=b[lenb-1-j];        b[lenb-1-j]=b[j];        b[j]=tmp;    }    e=0;     for (k=0;k<lena&&k<lenb;k++){        r=a[k]-'0'+b[k]-'0'+e;        c[k]=r%10+'0';        e=r/10;    }    if (k<lena)         for (;k!=lena;k++){            c[k]=a[k]+e;            e=(a[k]-'0')/10;        }    else    for (;k!=lenb;k++){            c[k]=b[k]+e;            e=(b[k]-'0')/10;}    if (e!=0)            c[k]=e+'0';    else        c[k]='\0';        lenc=strlen(c);        for (j=0;j<int(lenc/2);j++){        tmp=c[lenc-1-j];        c[lenc-1-j]=c[j];        c[j]=tmp;    }    puts(c);    printf("\n");    //for (i=0;i!=lenc;i++) printf("%s%c",c[i]);}}

Problem : 1002 ( A + B Problem II )     Judge Status : Accepted
RunId : 21585978    Language : C++    Author : jim0912
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include <stdio.h>#include <string.h>#include <stdlib.h> int main(){    int tot,ii,i,j,k,e,lena,lenb,lenc,r;    char tmp,a[1000],b[1000],c[1000];    scanf("%d",&tot);    for(ii=0;ii!=tot;ii++){        scanf ("%s%s",&a,&b);        memset (c,0,sizeof(c));         lena=strlen(a);        lenb=strlen(b);        printf("Case %d:\n",ii+1);        for (i=0;i!=lena;i++)             printf("%c",a[i]);        printf(" + ");                for (i=0;i!=lenb;i++)             printf("%c",b[i]);        printf(" = ");        for (i=0;i<int(lena/2);i++){             tmp=a[lena-1-i];            a[lena-1-i]=a[i];            a[i]=tmp;            }        for (j=0;j<int(lenb/2);j++){            tmp=b[lenb-1-j];            b[lenb-1-j]=b[j];            b[j]=tmp;            }        e=0;         for (k=0;k<lena&&k<lenb;k++){            r=a[k]-'0'+b[k]-'0'+e;            c[k]=r%10+'0';            e=r/10;            }        if (k<lena)             for (;k!=lena;k++){                r=a[k]-'0'+e;                e=r/10;                c[k]=r%10+'0';                }        else            for (;k!=lenb;k++){                r=b[k]-'0'+e;                e=r/10;                c[k]=r%10+'0';            }//printf("eis%d ",e);        if (e!=0)                c[k]=e+'0';//    else//        c[k]='\0';//        puts(c);        lenc=strlen(c);        for (j=0;j<int(lenc/2);j++){            tmp=c[lenc-1-j];            c[lenc-1-j]=c[j];            c[j]=tmp;            }        puts(c);        if (ii<tot-1) printf("\n");    //for (i=0;i!=lenc;i++) printf("%s%c",c[i]);    }    //system("pause");}

注解:

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int main()
{ //高精度加法 
int tot,ii,i,j,k,e,lena,lenb,lenc,r;
char tmp,a[1000],b[1000],c[1000];
scanf("%d",&tot);//N组测试数据 
for(ii=0;ii!=tot;ii++){
scanf ("%s%s",&a,&b);
memset (c,0,sizeof(c)); //初始化字符数组,很关键的一点,内存没有清空而引起bug 
lena=strlen(a);
lenb=strlen(b);
printf("Case %d:\n",ii+1);
/*---------------------------------*/ 
for (i=0;i!=lena;i++) 
printf("%c",a[i]);
printf(" + ");
for (i=0;i!=lenb;i++) 
printf("%c",b[i]);
printf(" = ");
/*-----------------------------oj格式需要而已*/ 
for (i=0;i<int(lena/2);i++){ 
tmp=a[lena-1-i];
a[lena-1-i]=a[i];
a[i]=tmp;
}
for (j=0;j<int(lenb/2);j++){
tmp=b[lenb-1-j];
b[lenb-1-j]=b[j];
b[j]=tmp;
}
/*---------------------------------颠倒字符串 便于相加*/
e=0; 
for (k=0;k<lena&&k<lenb;k++){
r=a[k]-'0'+b[k]-'0'+e;
c[k]=r%10+'0';
e=r/10;
}
/*--------------------------------对齐部分相加*/
if (k<lena) 
for (;k!=lena;k++){
r=a[k]-'0'+e;
e=r/10;
c[k]=r%10+'0';
}
else
for (;k!=lenb;k++){
r=b[k]-'0'+e;
e=r/10;
c[k]=r%10+'0';
}
/*---------------------------------非齐部分相加*/
if (e!=0)
c[k]=e+'0';
/*--------------------------------最高位加1*/
lenc=strlen(c);
for (j=0;j<int(lenc/2);j++){
tmp=c[lenc-1-j];
c[lenc-1-j]=c[j];
c[j]=tmp;
}
/*-------------------------------颠倒还原字符串数组*/
puts(c);
if (ii<tot-1) printf("\n");      //oj需要 最后一组数据不再输出空行 
}
}


原创粉丝点击