//土尔逊Torson 编写于2023/05/22 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <cstdio> #include <string> #include <cstring> using namespace std; const int MAXN = 10000; struct BigInteger083 { //定义大数 int digit[MAXN]; int length; BigInteger083(); BigInteger083(int x); BigInteger083 operator=(string str); BigInteger083 operator*(const BigInteger083& b); friend istream& operator>>(istream& in, BigInteger083& x); friend ostream& operator<<(ostream& out, const BigInteger083& x); }; istream& operator >> (istream& in, BigInteger083& x) { //定义输入操作符 string str; in >> str; x = str; //使用本程序定义的 赋值操作符 ( = ) return in; } ostream& operator << (ostream& out, const BigInteger083& x) { //定义输出操作符 for (int i = x.length - 1; i >= 0; --i) { out << x.digit[i]; } return out; } BigInteger083::BigInteger083() { //定义大数重载 memset(digit, 0, sizeof(digit)); length = 0; } BigInteger083::BigInteger083(int x) { //定义大数 int 重载 memset(digit, 0, sizeof(digit)); length = 0; if (x == 0) { digit[length++] = x; } while (x != 0) { digit[length++] = x % 10; x /= 10; } } BigInteger083 BigInteger083::operator=(string str) { //定义赋值操作符 ( = ) memset(digit, 0, sizeof(digit)); length = str.size(); for (int i = 0; i < length; ++i) { digit[i] = str[length - i - 1] - '0'; } return *this; } BigInteger083 BigInteger083::operator*(const BigInteger083& b) { //定义乘法操作符 ( * ) BigInteger083 answer; answer.length = length + b.length; for (int i = 0; i < length; ++i) { //用传统纸上手算乘法的方式计算,暂时不进位 for (int j = 0; j < b.length; ++j) { answer.digit[i + j] += digit[i] * b.digit[j]; } } for (int i = 0; i < answer.length; ++i) { //处理进位,进行进位运算 answer.digit[i + 1] += answer.digit[i] / 10; answer.digit[i] %= 10; } //注意 answer.digit[answer.length - 1] 等于 0 时 就是第 answer.digit[] 的 第 answer.length 个数 等于 0 while (answer.digit[answer.length - 1] == 0 && answer.length > 1) { //因为是逆置的大数,所以从后向前去掉多余的 0 answer.length--; //和重置长度参数 } return answer; } int main() { int n; while (scanf("%d", &n) != EOF) { BigInteger083 Q(1); for (int i = 1; i <= n; ++i) { //计算N的阶乘,从小数往大数乘法计算 Q = Q * BigInteger083(i); } cout << Q << endl; //用定义的输出操作符输出 } system("pause"); return EXIT_SUCCESS; } // 64 位输出请用 printf("%lld")