您的位置:首页 > 其它

51nod 1005 大数加法

2016-12-05 19:42 375 查看
#include<iostream>
#include<string>
using namespace std;
#define MAXN 10001
int a[MAXN]={0},b[MAXN]={0};
bool init(int a[])
{
int i;
string s;
cin>>s;
a[0]=s.length();
if(s[0]=='-')
{
//a[0]--;
for(i=1;i<=a[0];i++)
a[i]=s[a[0]-i]-'0';
a[a[0]]=0;
a[0]--;
return false;
}
else
{
for(i=1;i<=a[0];i++)
a[i]=s[a[0]-i]-'0';
return true;
}
}
void print(int a[])
{
int i;
if (a[0]==0){cout<<0<<endl;return;}
for(i=a[0];i>0;i--) cout<<a[i];
cout<<endl;
return ;
}
void  jia(int a[],int b[])
{ int i,k;
if(a[0]<b[0])a[0]=b[0];
for(i=1;i<=a[0];i++) a[i]+=b[i];
for(i=1;i<=a[0];i++)
{
a[i+1]+=a[i]/10;
a[i]%=10;
}
if(a[a[0]+1]>0) a[0]++;
}
int compare (int a[],int b[])
{ int i;
if (a[0]>b[0]) return 1;//a的位数大于b则a比b大
if (a[0]<b[0]) return -1;//a的位数小于b则a比b小
for(i=a[0];i>0;i--)  //从高位到低位比较
{ if (a[i]>b[i]) return 1;
if (a[i]<b[i]) return -1;
}
return 0;//各位都相等则两数相等。
}

int jian(int a[],int b[])//计算a=a-b
{
int flag,i;
flag=compare(a,b); //调用比较函数判断大小
if (flag==0) {a[0]=0;return 1;} //相等
if(flag==1) //大于
{
for(i=1;i<=a[0];i++)
{
if(a[i]<b[i]){ a[i+1]--;a[i]+=10;} //若不够减则向上借一位
a[i]=a[i]-b[i];
}
while(a[a[0]]==0) a[0]--; //修正a的位数
return 1;
}
if (flag==-1)//小于  则用a=b-a,返回-1
{
for(i=1;i<=b[0];i++)
{if(b[i]<a[i]){b[i+1]--;b[i]+=10;} //若不够减则向上借一位
a[i]=b[i]-a[i];
}
a[0]=b[0];
while(a[a[0]]==0) a[0]--; //修正a的位数
return -1;
}
}
int main()
{
bool signa=false,signb=false;
signa = init(a);
signb = init(b);
if(signa&&signb)
{
jia(a,b);
print(a);
}
else if(!signa&&!signb)
{
jia(a,b);
printf("-");
print(a);
}
else
{
if(jian(a,b)==1)
{
if(!signa&&a[0])
cout<<'-';
}
else
{
if(!signb&&a[0])
cout<<'-';
}
print(a);
}
return 0;
}


大数加法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: