【1】题目
10000的阶乘怎么算?
答:“10000”这个数字太大了,无论用什么数据类型保存结果都会溢出。现在使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算。
【2】思路
用大数运算方法,数组存放。
【3】代码
#include <stdio.h>
#include <iostream>
#include<vector>
#include<time.h>
using namespace std;
int main()
{
int a[20001];//储存每一位所得到的数
int temp, digit, n, i, j = 0;//temp每次的得数 digit每次得数的位数
scanf_s("%d", &n);//scanf用途:从键盘输入数据,从键盘得到字符,放到某个变量里。
a[0] = 1;//从1开始乘
digit = 1;//位数从第一位开始
for (i = 2; i <= n; i++)//从1开始到n的循环遍历
{
int num = 0;
for (j = 0; j < digit; j++)
{
temp = a[j] * i + num;//将一个数的每一位数都分别乘以i,
a[j] = temp % 10;//将一个数的每一位数利用数组进行储存,取余数
num = temp / 10;//取除数
}
while (num)//判断退出循环后,num的值是否为0
{
a[digit] = num % 10;//继续储存
num = num / 10;
digit++;
}
}
for (i = digit - 1; i >= 0; i--)//倒序输出每一位
printf("%d", a[i]);
printf("\n");
return 0;
}