例如:计算10000!
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d", &n);
int x1 = 1;
int i1 = 1;
int cnt;
int cnt1 = 0;
int c[40000] = {
0 }; //用于存储两个大数的乘积
if (n <= 10) {
//n是10以内直接算
while (i1 <= n) {
x1 *= i1;
i1++;
}
printf("%d", x1);
}
else {
//n大于10,将两个数存储在字符串中
char a[6], b[40000];
int d[10];
b[0] = '3'; //b为10!的值的字符串形式
b[1] = '6';
b[2] = '2';
b[3] = '8';
b[4] = '8';
b[5] = '0';
b[6] = '0';
b[7] = '\0';
i1 = 11;
int q1, w1, t1;
t1 = i1;
int j1;
int k1;
while (i1 <= n) {
//从11开始计算
for (q1 = 0; q1 <= cnt1; q1++) {
//将c中的数字归零
c[q1] = 0;
}
j1 = 0;
k1 = 0;
t1 = i1;
while (t1 > 0) {
//将i1分解成各个位数
q1 = t1 / 10;
w1 = t1 % 10;
d[j1] = w1;
t1 = q1;
j1++;
}
for (j1 = j1 - 1; j1 >= 0; j1--) {
//将i1以字符串形式存储在a中
a[k1] = d[j1] + '0';
k1++;
}
a[k1] = '\0'; //在字符串后要加\0,不然算不了a中的个数
int i;
int j, k, q;
j = strlen(a);
k = strlen(b);
cnt = 0;
int w, e, r;
r = <