《算法笔记》复习——大整数运算

参考《算法笔记》

在平时编程的过程中,我们能够使用的最大整数表达范围是9223372036854775807,为long long型,当超过了这个范围我们应该如何进行运算呢?

在《算法笔记》中提出用整数型数组进行表示整数的方法,需要注意以下几点:

① 大整数运算,可以使用数组来表示
② 整数的高位存储在数组的高位,整数的低位存储在数组的低位
③ 并且使用len来记录位的长度
④  还要加上构造函数,能够直接初始化
⑤ 通过字符串进行读入,在转存到bign结构体,读入的时候整数高位在字符串低位,因此要倒着赋值

下面让我们来看一下代码:

#include
#include
using namespace std;
struct bign{
    int d[10001];
    int len;
    bign(){
        memset(d,0,sizeof(d));
        len = 0;
    }
};
bign change(char str[]){
    bign a;
    a.len = strlen(str);// 碰到'\0'就结束,即刚好等于字符串的长度
    for(int i=0;ib.len) return 1;
    else if(a.len=0;i--){
            if(a.d[i]>b.d[i]) return 1;
            else if(a.d[i]=1&&c.d[c.len-1]==0){
        c.len--;
    }
    return c;
}
bign multi(bign a,int b){
    bign c;
    int flag = 0;
    for(int i=0;i=0;i--){
        r = r*10 + a.d[i];
        if(r=1&&c.d[c.len-1]==0){
        c.len--;
    }
    return c;
}
void printbign(bign re){
    for(int i=re.len-1;i>=0;i--){
        printf("%d",re.d[i]);
    }
    return;
}
int main(){
    char str1[1000],str2[1000];
    scanf("%s%s",str1,str2);
    bign a= change(str1);
    bign b = change(str2);
    printbign(add(a,b));
    printf("\n");
    printbign(sub(a,b));
    return 0;
}

 

你可能感兴趣的:(C++,Algorithms)