|  | 
 
 发表于 2020-6-26 20:44:53
|
显示全部楼层 
| 本帖最后由 永恒的蓝色梦想 于 2020-6-30 18:00 编辑 
 复制代码#include<stdio.h>
#define N 500
void main()
{
        int sum = 0;//此变量用来计算统计结果各位数字之和
        int count = 1;//用来统计计算结果的长度,也是fact数组被用了多少个元素
        int i, j, carry = 0;//carry用来保存每次的进位
        int fact[N] = { 1 };//将fact[0]初始化为1,方便后面的计算
        for (i = 1; i <= 100; i++)
        {
                for (j = 0; j < count; j++)//手动模拟乘法
                {
                        fact[j] = fact[j] * i + carry;//让fact数组每一位与i相乘,再加上进制位
                        carry = fact[j] / 10;
                        fact[j] %= 10;//fact数组的每一位数组都在0-9之间
                }
                while (carry > 0)//当for循环结束,最高为仍然可能产生进位,需要处理
                {
                        fact[count++] = carry;
                        if (fact[count - 1] > 9)
                        {
                                carry = fact[count - 1] / 10;
                                fact[count - 1] %= 10;
                        }
                        else
                        {
                                carry = 0;
                        }
                }
        }
        printf("100的阶乘结果为\n");
        for (i = count - 1; i >= 0; i--)
                printf("%d", fact[i]);
        printf("\n");
        for (i = count - 1; i >= 0; i--)
                sum += fact[i];
        printf("100!的和 = %d\n", sum);
        getchar();
}
输出结果为:
 100的阶乘结果为
 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
 100!的和 = 648
 | 
 |