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;
}
else
c=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;
}
else
c=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;
}
else
c=0;
sum[maxlen]=tempb+'0';
lenb--;maxlen--;
}
}
if(c==1)
{
sum[0]=1+'0';
}
return sum;
}
最后提示一下如果想用Java的话,用BigInteger有奇效