1. 程式人生 > >【C語言訓練】階乘和數*

【C語言訓練】階乘和數*

題目連結:http://115.28.203.224/problem.php?cid=1010&pid=35

題目描述

一個正整數如果等於組成它的各位數字的階乘之和,該整數稱為階乘和數。
例如,145=1!+4!+5!,則145是一個三位階詳細和數。
請問:共有多少個階乘和數? 資料範圍 1<=x <= 1e7

輸入

輸出

所有的階乘和數(按字典序,即1打頭的在前,2打頭的次之,..., 空格分隔)

提示

資料範圍 1<=x<=1e7

程式碼

 1 #include <iostream>
 2 using namespace std;
 3 long fac(int
n) 4 { 5 long sum = 1; 6 for(int i = 1; i <= n; i++) 7 sum *= i; 8 return sum; 9 } 10 int main() 11 { 12 long m1, m2, m3, m4, m5, m6, n1, n2, n3, n4, n5, n6; 13 for(int a = 1; a <= 9; a++) 14 { 15 if (a == fac(a)) 16 cout<<a<<"
"; 17 for(int b = 0; b <= 9; b++) 18 { 19 m1 = a * 10 + b; 20 n1 = fac(a) + fac(b); 21 if (m1 == n1) 22 cout<<m1<<" "; 23 for(int c = 0; c <= 9; c++) 24 { 25 m2 = m1 * 10 + c; 26
n2 = n1 + fac(c); 27 if (m2 == n2) 28 cout<<m2<<" "; 29 for(int d = 0; d <= 9; d++) 30 { 31 m3 = m2 * 10 + d; 32 n3 = n2 + fac(d); 33 if(m3 == n3) 34 cout<<m3<<" "; 35 for(int e = 0; e <= 9; e++) 36 { 37 m4 = m3 * 10 + e; 38 n4 = n3 + fac(e); 39 if(m4 == n4) 40 cout<<m4<<" "; 41 for(int f = 0; f <= 9; f++) 42 { 43 m5 = m4 * 10 + f; 44 n5 = n4 + fac(f); 45 if(m5 == n5) 46 cout<<m5<<" "; 47 for(int g = 0;g <= 9; g++) 48 { 49 m6 = m5 * 10 + g; 50 n6 = n5 + fac(g); 51 if(m6 == n6) 52 cout<<m6<<" "; 53 } 54 } 55 } 56 } 57 } 58 } 59 } 60 return 0; 61 }