【算法笔记5.6小节 -大整数运算 】

#include
#include
#include
#include
using namespace std;

struct bign{
    int d[1000];
    int len;
    bign(){
        memset(d, 0, sizeof(d));
        len=0;
    }

};

bign change(char str[])//将整数转换为bign
{
    bign a;
    a.len = strlen(str);
    for(int i=0; ib.len) return 1;//a大
    else if(a.len=0; i--)
        {
            if(a.d[i]>b.d[i]) return 1;
            else if(a.d[i]=1 && c.d[len-1]==0)
    {
        c.len--;//去除高位的0,同时至少保留一位最低位
    }
    return c;
}

bign multi(bign a, int b)//高精度和低精度的乘法
{
    bign c;
    int carry = 0;//进位
    for(int i=0; i=0; i--)//从高位开始
    {
        int temp = a.d[i] + carry * 10;    //当前位加上余数
        carry = temp % b;//保存当前位的余数
        a.d[i] = r/b; //保存当前的商
    }
    while(a.len>1&&a.d[a.len-1]==0)
    {
        a.len--;//去掉高位的0,同时至少保留一位最低位
    }
    return a;
}

void print(bign a)//输出bign
{
    for(int i=a.len-1; i>=0; i--)
        printf("%d",a.d[i]);
}


int main()
{
    char str1[1000],str2[1000];
    scanf("%s%s",str1,str2);
    bign a = change(str1);
    bign b = change(str2);
    print(add(a,b));
    return 0;
}

 

你可能感兴趣的:(【算法笔记】,Codeup墓地,算法笔记)