大数模板,加杭电1002的代码·····
因为种种原因,第二次做的时候WA了几次,CE了几次,真蛋痛。
#include<iostream>
#include<iomanip>
#include<string>
#include<stdio.h>
using namespace std;
//杭电 1002
//http://acm.hdu.edu.cn/showproblem.php?pid=1002
//下面是大数相加的模板。
void Bignumber(string x,string y)
{
int a[1000]={0},b[1000]={0},c[1000]={0};//这个初始化坑爹呀,本来用了memset(头文件为string.h)
//谁知道那个(string.h)和(string)在OJ上有冲突,搞到我WA了3次,CE了2次。
//我容易吗?弄个模板而已,幸好之前AC了,要不真蛋痛。
int i,j,k,l;
int size1,size2,size;
size1=x.size();size2=y.size();
if(size1>=size2)
size=size1;
else
size=size2;
//c数组的大小,开大一位,反正头位是0就不输出。
for(i=size1-1;i>=0;--i)
a[i]=x[size1-1-i]-'0';
for(j=size2-1;j>=0;--j)
b[j]=y[size2-1-j]-'0';
//将字符串每一位转化成数字存在数组里。
for(k=0;k<=size;++k)
{
c[k]+=a[k]+b[k];
if(c[k]>=10)
{
c[k]%=10;
c[k+1]=1;
}
}
//将两个数组相加,大于等于10的,取余,前一位的值变成一。
for(l=size;l>=0;--l)
{
if(l!=size)
cout<<c[l];
if(l==size&&c[l]!=0)
cout<<c[l];
}
//输出,因为不会返回指针,只好用这种方法,表示指针超烂。
}
//主函数,比之前的代码简洁多了,而且模板重复使用次数比较好。
int main( )
{
string a,b;
int T,i;
while(cin>>T)
{
for(i=1;i<=T;++i)
{
cin>>a>>b;
cout<<"Case "<<i<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
Bignumber(a,b);
cout<<endl;
if(i!=T)
cout<<endl;
}
}
return 0;
}
欢迎指点。