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