大整数加减乘法

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 1000
using namespace std;
struct node{
    int num[N],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;
}


posted @ 2016-10-25 19:30  Mr.doublerun  阅读(18)  评论(0)    收藏  举报