大数数组(结构体)

大数数组,阶乘

《深入浅出程序设计竞赛》上看到了一个很妙的结构体用法,创建了一个大数类型。
并且用运算符重构写出了加法和乘法,摘下来记录下。
主函数部分为算出一个数的阶乘

#include<string>
#include<cstdio>
#include<iostream>
#include<bits/stdc++.h>
using namespace std;

struct Bigint{
    int len, a[51];
    Bigint(int x = 0){
    memset(a, 0, sizeof (a));
    for(len = 1; x; len++)
        a[len] = x % 10, x /= 10;
    len--;
    }

    int &operator[](int i){
        return a[i];
    }

    void flatten(int L){
        len = L;
        for (int i = 1; i <=len; i++)
            a[i + 1] += a[i] / 10, a[i] %= 10;
        for (; !a[len]; )
            len--;
    }

    void print(){
        for (int i = max(len, 1); i >= 1; i--)
            cout<<a[i];
    }
};

Bigint operator*(Bigint a, int b){
    Bigint c;
    int len = a.len;
    for (int i = 1; i <= len; i++)
        c[i] = a[i] * b;
    c.flatten(len + 11);
    return c;
}

int main()
{
    Bigint ans(1);
    int n;
    cin>>n;
    for (int i = 1; i <= n; i++)
    {
        ans = ans * i;
    }
    ans.print();
}
上一篇:前端面试 【JavaScript】— 什么是BigInt? 谈谈你对它的认识


下一篇:TINYINT[M]、INT[M]和BIGINT[M]中M值的意义