首页 > 代码库 > poj 1142

poj 1142

http://poj.org/problem?id=1142

题意:找一个比n大的数字,这个数字要可以分解(这点很重要)成,分解的因子和,和这个数字的各位数字和,相等的话,输出这个数字

思路:因为这个数字要可以分解,所以首先判断这个数是否是质数,这个很重要,因为质数不符合题意。然后对这个数字进行分解。递归分解。递归的时候也注意,有可能某个因子是质数,如果这个因子是质数,比如11,也要分解成1和1相加。而不是加11

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <math.h>
 4 
 5 int tmp;
 6 bool isprime (int k)
 7 {
 8     int t = sqrt ( k + 0.5 );
 9     for ( int i = 2 ; i <= t ; i ++ )
10         if ( k % i == 0 )
11             return false;
12     return true;
13 }
14 int sum(int x)
15 {
16     int temp = 0;
17     while(x>0)
18     {
19         temp += x%10;
20         x/=10;
21     }
22     return temp;
23 }
24 void solve(int x)
25 {
26     if(isprime(x)){
27         tmp+=sum(x);
28         return;
29     }
30     for(int i = 2; i<=x; i++)
31     {
32 
33         if(!(x%i))
34         {
35             tmp+=sum(i);
36             solve(x/i);
37             break;
38         }
39     }
40 }
41 
42 
43 int main()
44 {
45     int n;
46     while(scanf("%d",&n))
47     {
48         if(n<=0)
49             break;
50         for(int i = n+1;; i++)
51         {
52             tmp = 0;
53             solve(i);
54             if(sum(i)==tmp&&!isprime(i))
55             {
56                 printf("%d\n",i);
57                 break;
58             }
59         }
60     }
61     return 0;
62 }

 

poj 1142