您的位置:首页 > 其它

大整数加减乘法

2016-10-25 19:30 204 查看
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000
using namespace std;
struct node{
int num
,len;
}a,b;
string st1,st2;
void init(){
getline(cin,st1);
getline(cin,st2);
int l1=a.len=st1.size(),l2=b.len=st2.size();
memset(a.num,0,sizeof a.num);
    memset(b.num,0,sizeof b.num);
for (int i=0;i<l1;i++) a.num[l1-i]=st1[i]-'0';
for (int i=0;i<l2;i++) b.num[l2-i]=st2[i]-'0';
}
node add(node a,node b){
node c;
memset(c.num,0,sizeof c.num);
int len=max(a.len,b.len);
for (int i=1;i<=len;i++)
{
int tmp=c.num[i]+a.num[i]+b.num[i];
c.num[i]=tmp%10;
c.num[i+1]=tmp/10;
}
if (c.num[len+1]) len++;
while (!c.num[len] && len>1) len--;//注意和为0的情况
c.len=len;
return c;
}
node bigminus(node a,node b){
node c;
memset(c.num,0,sizeof c.num);
int len=a.len;
for (int i=1;i<=len;i++)
{
if (a.num[i]<b.num[i])
{
a.num[i]+=10;
int k=i+1;
a.num[k]--;
while(a.num[k]<0)
{
a.num[k]+=10;
a.num[++k]--;
}
}
//对于进位的处理要细致一点!
c.num[i]=a.num[i]-b.num[i];
}
while (!c.num[len] && len>1) len--;//注意和为0的情况
c.len=len;
return c;
}
node mult(node a,node b){
    node c;
    memset(c.num,0,sizeof c.num);
    c.len=a.len+b.len;
    for(int i=1;i<=a.len;i++)
        for(int j=1;j<=b.len;j++)
        c.num[i+j-1]+=a.num[i]*b.num[j];
    for(int i=1;i<=c.len;i++)
        c.num[i+1]+=c.num[i]/10,c.num[i]%=10;
    while (!c.num[c.len] && c.len >1) c.len--;
    return c;
} void print(node t){
for (int i=t.len;i>0;i--) printf("%d",t.num[i]);
}
int main(){
init();
node ans=add(a,b);
print(ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: