标签:
这是一道很标准的大整数加法,我却wa了4次,没提交一次就查到一些细节问题,比如说我们考虑前导
0的问题,还有就是没有对输入数组处理, 使得他们每次输入时高位的置0,还有就是没考虑到最后相加后的进位,
这些问题一一改正之后,还是wa了,原来是因为,我把if语句中的==只写了一个。。。真坑啊,,,我就说怎么会
不过,明明写的对的,大数相加竟然还wa了四次,还有就是这道题最后不写换行也会wa。。。看来还是有必要从基础练起提高代码能力:
贴代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; int a[200]; char b[105]; void solve(char c[])//用来将输入的数组翻转 { int len=strlen(c); int t,i; for(i=0; i<=(len-1)/2; i++) { t=c[i]; c[i]=c[len-1-i]; c[len-1-i]=t; } } int main() { int i,j,up,flag; memset(a,0,sizeof(a)); memset(b,'0',sizeof(b)); int length=0; while(scanf("%s",b),strcmp("0",b)!=0) { solve(b); //puts(b); int len=strlen(b); int max1=max(length,len); for(i=0,up=0; i<max1; i++) { if(i>len-1)//判断一下是不是b数组已经加完了,这里有可能会误用到上次的输入字符数组 b[i]='0'; a[i]=a[i]+b[i]-'0'+up; up=a[i]/10; a[i]=a[i]%10; } if(up!=0)//判断一下是否最后的加法运算产生了进位 a[i++]=up; length=i; } flag=1; for(i=length-1; i>=0; i--) { if(flag==1&&a[i]==0)//处理前导0的函数 continue; printf("%d",a[i]); flag=0; } printf("\n"); //这道题不写换行也会wa。。。 return 0; }
uva 424(Integer Inquiry)高精度大整数加法
标签:
原文地址:http://blog.csdn.net/sinat_22659021/article/details/45998565