标题:关于阶乘计算升级版
只看楼主
小cai鸟
Rank: 2
等 级:论坛游民
帖 子:53
专家分:25
注 册:2018-7-13
结帖率:60%
 问题点数:0 回复次数:2 
关于阶乘计算升级版
/*其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。*/

#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
    int N;
   
    scanf("%d", &N);
    Print_Factorial(N);
    return 0;
}

void Print_Factorial ( const int N) {
    int fact[2568] = {0};
    fact[0] = 1;
    int n = 0, k = 1;
    for (int i=2; i<=N; i++) {
        for (int j=0; j<k; j++) {
            int temp = i * fact[j] + n;  
            fact[j] = temp  % 10;
            n = temp / 10;
            if (n && j==k-1) {
                k++;  
            }
        }
    }
    for (int i=k-1; i>=0; i--) {
        if (N >= 0) {
            printf("%d", fact[i]);
        } else {
            printf("Invalid input");
        }
    }
    printf("\n");
}

/*这是计算阶乘的另一种算法   好像是把最后的结果从个十百等分别放在了fact这个数组中  但是我没看懂中间两个循环里的内容  
    temp有什么用?
     fact[j] = temp  % 10  为什么这样?
      n又是什么?
        */

/*希望看懂的大佬解释下两个循环中是怎么循环的  内容是什么  谢谢*/
搜索更多相关主题的帖子: 阶乘 计算 int for temp 
2018-07-26 17:30
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
就是最简单的小学二年级竖式乘法,比如
 789
*  3
------
先计算 tmp=3*9+0=27,然后就知道个位是7,进位2了
再计算 tmp=3*8+2=26,然后就知道十位是6,进位2了
……
2018-07-27 08:42
小cai鸟
Rank: 2
等 级:论坛游民
帖 子:53
专家分:25
注 册:2018-7-13
得分:0 
回复 楼主 小cai鸟
好像是的   我再仔细琢磨琢磨
2018-08-01 10:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488834-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012524 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved