HDU 1002 之常见WA(C++描述)

来源:互联网 发布:p2p软件 编辑:程序博客网 时间:2024/05/02 04:10

HDU 1002 其实挺水的一题。不过我是个菜鸟,所以应该是典型的错误都犯了些,记录下来。



1.开始我忽略了每个pair数之间多余的空格

2.这个题是个大数相加的题。给出的数超过1000位,肯定无法用普通的INT在承载,只能用数组存储然后自己模拟加法的进位

3.开始在本地测试挺成功,但是给我同学一看发现我忽略了一些简单的情况。如1+99  11111111111+3等这样的情形

小问题还发生了很多,我在OJ上提交了N次,,,AC率变成了5%一下。。。汗。。

总结了一下,一般换行有问题会提示Presentation Error所以如果出现了WA,首先检查一下自己的代码把,其次看看输入输出格式。这基本上就没问题了

贴出我的程序,,,,费了劲了!

#include<stdio.h>#include<string.h>#include <iostream>using namespace std;char *add(char *a,char *b);void print(char *a);int main(void){int n;char num1[1502];char num2[1502];cin>>n;for(int i=0;i<n;i++){cin>>num1>>num2;cout<<"Case "<<i+1<<":"<<endl;cout<<num1<<" + "<<num2<<" = ";print(add(num1,num2));cout<<endl;if(i+1!=n)cout<<endl;}}void print(char *a){int i=0;while(a[i]!='\0'||a[i]=='\0'&&i==0){if(a[i]=='\0'){i++;continue;}else{cout<<a[i];i++;}}}char *add(char *a,char *b){int lena =strlen(a);int lenb =strlen(b);int c=0;int maxlen = (lena<lenb)?lenb:lena;char* sum=(char*)malloc(maxlen+2);sum[maxlen+1]='\0';memset(sum,'\0',sizeof(sum));while((lena-1)>=0&&(lenb-1)>=0){int sum1 = a[lena-1]-'0';int sum2 = b[lenb-1]-'0';int sum3 = sum1+sum2+c;if(sum3>=10){sum3=sum3-10;c=1;}elsec=0;sum[maxlen]=sum3+'0';lena--;lenb--;maxlen--;}while(lena-1>=0){if(lena-1>=0){int tempa = a[lena-1]-'0';tempa = tempa+c;if (tempa>=10){c=1;tempa=tempa-10;}elsec=0;sum[maxlen]=tempa+'0';lena--;maxlen--;}}while(lenb-1>=0){if(lenb-1>=0){int tempb = b[lenb-1]-'0';tempb = tempb+c;if (tempb>=10){c=1;tempb=tempb-10;}elsec=0;sum[maxlen]=tempb+'0';lenb--;maxlen--;}}if(c==1){sum[0]=1+'0';}return sum;}
最后提示一下如果想用Java的话,用BigInteger有奇效

0 0