欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++小案例-利用数组计算n(防止溢出)

程序员文章站 2024-03-15 19:08:06
...

输入一个整数n,输出n!
//计算n!

//计算n!
#include<stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int num[300] = {1}, len = 0, rem = 0, i, j;
    for(i = 2; i<=n; i++)//将每次的阶乘结果在数组中倒序存储,每次与i相乘之后与10求余个位留下,十位进到数组的下一位
    {
        for(j = 0; j <= len; j++)
        {
            rem += num[j] * i;
            num[j] = rem % 10;
            rem /= 10;
            if(j == len && rem != 0) len++;//如果数组已满且rem中不为零则需要将数字长度加一
        }
    }
    for(i = len; i >= 0; i--)//将数组倒序输出
        printf("%d", num[i]);
    return 0;
}

算法思想:
举个例子,比如说我们现在得到了4!= 24,在数组中是以倒序的方式存储,即42,a[0] = 4,a[1] = 2(数组下标从1开始),现在要计算5!
第一次循环:i=5,j=0,len=1,rem=0
rem=num[0]i+rem=45=20;
num[0]=rem%10=0;
rem=rem/10=2;
第二次循环:i=5,j=1,len=1,rem=2
rem=num[1]i+rem=25+2=12;
num[1]=rem%10=2;
rem=rem/10=1;
j==len=1且rem不为0
则len++
第三次循环:i=5;j=2;len=2,rem=1;
rem=num[2]i+rem=05+1=1;
num[2]=rem%10=1;
rem=rem/10=0;

所以倒序输出可得:120

相关标签: n的阶乘