4-10 階乘計算升級版

本題要求實現(xiàn)一個打印非負整數(shù)階乘的函數(shù)。
函數(shù)接口定義:

void Print_Factorial ( const int N );

其中N是用戶傳入的參數(shù),其值不超過1000。如果N是非負整數(shù),則該函數(shù)必須在一行中打印出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 }; //用于存儲最終結(jié)果數(shù)據(jù)
        int k = 1;  //位數(shù)
        int n = 0;  //進位
        int i, j, x, temp;
        num[0] = 1;     //結(jié)果初始化1
        for (i = 2; i <= N; i++)  //從2開始階乘 數(shù)據(jù)結(jié)果逆序存放
        {
            for (j = 0; j < k; j++)  //將臨時結(jié)果的每一位與階乘數(shù)值相乘
            {
                temp = num[j] * i + n; // 每一位分別作階乘
                num[j] = temp % 10;    //更新末位數(shù)值
                n = temp / 10;   //更新進位數(shù)值
            }
            while (n != 0)
            {
                num[k] = n % 10;  //更新進位數(shù)據(jù)
                n /= 10;
                k++;     //更新進位位數(shù)
            }
        }
        for (x = k - 1; x >= 0; x--)   //數(shù)據(jù)輸出
            printf("%d", num[x]);
    }
    else 
        printf("Invalid input");
}

這個題目提交了好多次,開始以為是基礎(chǔ)的階乘題目,但是提交后發(fā)現(xiàn)永遠是部分正確,只得15分,起初以為是輸出printf函數(shù)的問題,修改后還是部分正確,最終查找了幾個CSDN博客才找到源碼,水平較渣,源碼看了好久才看明白。
這個問題中,由于1000!大約有3000位數(shù)值,所以只能通過構(gòu)造數(shù)組的形式來實現(xiàn)對結(jié)果的存儲。
int 型占在32位上位機上占據(jù)32個字節(jié),所以最大值時2的32次方=4294967296(無符號),帶符號再除以2,負數(shù)比正數(shù)多一個,便得出取值范圍-2147483648~+2147483647。又由于13!=6 227 020 800,已經(jīng)超出了最大值,所以在計算13以后的階乘時采用數(shù)組方式解決問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Attention: 如果喜歡我寫的文章,歡迎來我的github主頁給starGithub:github.com...
    Muzi_Jin閱讀 1,511評論 0 0
  • 計算機二級C語言上機題庫(南開版) 1.m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,609評論 1 42
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,008評論 25 709
  • 守其初心,始終不變。初心常被置于嘴邊,恍恍惚惚間,變了,如何。 我也陸陸續(xù)續(xù)寫了一段時間了,期間不少人問我為什么突...
    安語之閱讀 413評論 1 6
  • 風(fēng),蕭瑟迷離 苦等你夢中的輪回 你拙一桿鈍筆 你懷一顆素心 你臨摹龜甲上字跡 你輕繪名人的佳作 你等不到鎮(zhèn)外桃李放...
    許梟閱讀 254評論 1 0

友情鏈接更多精彩內(nèi)容