4-10 阶乘计算升级版

本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
程序样例

#include <stdio.h>
void Print_Factorial(const int N);
int main()
{
    int N;
    scanf_s("%d", &N);
    Print_Factorial(N);
    getchar();
    getchar();
    return 0;
}
/* 你的代码将被嵌在这里 */
void Print_Factorial(const int N)
{
    int i;
    int sum=1;
    if (N >= 0&&N<=12)
    {
        if (N == 0)
            sum = 1;
        else
         for (i = 1; i <= N; i++)
            sum = sum*i;
        printf("%d\n", sum);
    }
    else if (N > 12 && N <= 1000) 
    {
        int num[3000] = { 0 }; //用于存储最终结果数据
        int k = 1;  //位数
        int n = 0;  //进位
        int i, j, x, temp;
        num[0] = 1;     //结果初始化1
        for (i = 2; i <= N; i++)  //从2开始阶乘 数据结果逆序存放
        {
            for (j = 0; j < k; j++)  //将临时结果的每一位与阶乘数值相乘
            {
                temp = num[j] * i + n; // 每一位分别作阶乘
                num[j] = temp % 10;    //更新末位数值
                n = temp / 10;   //更新进位数值
            }
            while (n != 0)
            {
                num[k] = n % 10;  //更新进位数据
                n /= 10;
                k++;     //更新进位位数
            }
        }
        for (x = k - 1; x >= 0; x--)   //数据输出
            printf("%d", num[x]);
    }
    else 
        printf("Invalid input");
}

这个题目提交了好多次,开始以为是基础的阶乘题目,但是提交后发现永远是部分正确,只得15分,起初以为是输出printf函数的问题,修改后还是部分正确,最终查找了几个CSDN博客才找到源码,水平较渣,源码看了好久才看明白。
这个问题中,由于1000!大约有3000位数值,所以只能通过构造数组的形式来实现对结果的存储。
int 型占在32位上位机上占据32个字节,所以最大值时2的32次方=4294967296(无符号),带符号再除以2,负数比正数多一个,便得出取值范围-2147483648~+2147483647。又由于13!=6 227 020 800,已经超出了最大值,所以在计算13以后的阶乘时采用数组方式解决问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Attention: 如果喜欢我写的文章,欢迎来我的github主页给starGithub:github.com...
    Muzi_Jin阅读 1,499评论 0 0
  • 计算机二级C语言上机题库(南开版) 1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平...
    MrSunbeam阅读 6,568评论 1 42
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 177,378评论 25 709
  • 守其初心,始终不变。初心常被置于嘴边,恍恍惚惚间,变了,如何。 我也陆陆续续写了一段时间了,期间不少人问我为什么突...
    安語之阅读 402评论 1 6
  • 风,萧瑟迷离 苦等你梦中的轮回 你拙一杆钝笔 你怀一颗素心 你临摹龟甲上字迹 你轻绘名人的佳作 你等不到镇外桃李放...
    许枭阅读 244评论 1 0

友情链接更多精彩内容