大数类

来源:互联网 发布:中国历届人口普查数据 编辑:程序博客网 时间:2024/05/17 01:41

大数

C++中没有大数类,自己实现了一个。

代码

#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>#include <map>#include <cstring>using namespace std;struct bigInteger{    int digit[1000]; //按照4位数一个单元来保存数值    int size; //下一位即将使用的数组单元    //初始化    void init(){        size = 0;        for (int i = 0; i < 1000; ++i) {            digit[i]=0;        }    }    //从字符串中获取整数    void set(char str[]){        init();        int L = strlen(str);        int temp = 0;        int c = 1;        int j=0;        for (int i = L-1; i >=0 ; --i) {            temp += (str[i]-'0')*c;            j++;            c*=10;            if (j==4||i==0){                digit[size++] = temp;                temp=0;                j = 0;                c  = 1;            }        }    }    void  output(){        for (int i = size-1; i >=0 ; --i) {            if (i==size-1)                printf("%d",digit[i]);            else                printf("%04d",digit[i]);        }        printf("\n");    }    bigInteger operator+(const bigInteger &A) const {        bigInteger ret;        ret.init();        int carry = 0 ;        for (int i = 0; i <size||i<A.size ; ++i) {            int temp = digit[i]+A.digit[i]+carry;            ret.digit[ret.size++] = temp%10000;            carry = temp/10000;        }        if (carry!=0)            ret.digit[ret.size++] = carry;        return  ret;    }}a,b,c;char str1[1002],str2[1002];int main(){    while (scanf("%s%s",str1,str2)){        a.set(str1);        b.set(str2);        c = a+b;        c.output();    }    return 0;}
0 0
原创粉丝点击