首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言尋找符合 n = a! + b! + c! 的三位數 (階乘和與數字位對應)

     編輯:關於C

找出所有三位數 n = 100a+10b+c,使得 n 等於其各位數字階乘之和:n = a! + b! + c!。a 為百位 (1~9),b、c 為十位、個位 (0~9)。三重迴窮舉所有組合,計算階乘和比對。著名解為 145 (1!+4!+5!=145)。

演算法

  1. 自訂 fact(m) 計算階乘 (0!=1)。
  2. 三重迴圈 a=1..9, b=0..9, c=0..9。
  3. 計算 sum = fact(a)+fact(b)+fact(c)。
  4. 若 sum == 100*a+10*b+c 則輸出。

程式碼

#include <stdio.h>

int fact(int m);

int main() {
    int a,b,c,n;
    for(a=1;a<=9;a++)
        for(b=0;b<=9;b++)
            for(c=0;c<=9;c++) {
                n = fact(a)+fact(b)+fact(c);
                if(n == 100*a+10*b+c)
                    printf("符合條件:%d (=%d!+%d!+%d!)\n", n, a,b,c);
            }
    return 0;
}

int fact(int m) {
    int s=1;
    for(int i=2;i<=m;i++) s*=i;
    return s;
}

執行結果

符合條件:145 (=1!+4!+5!)
符合條件:40585 (五位數,超出三位數範圍)

僅 145 為三位數解。此為因子翁數的特例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved