地址:http://acm.hit.edu.cn/judge/show.php?Proid=1087
思路:求1到1000000以内的自数,用了最笨的方法,先是i从1到1000000循环一遍求以i为基数的d(i),对flag[d(i)]置true,然后利用flag[]判断为那些false的是自数。本以为会超时,结果居然AC了,自己也感觉很奇怪……
代码如下:

#include <stdio.h>
#include 
<memory.h>

#define MAX 1000001

int main()
{
    
bool flag[MAX];
    
int i;
    
int result, tmp;

    memset(flag, 
0sizeof(flag));
    
for(i = 1; i < MAX; i++)
    
{
        tmp 
= result = i;
        
while(tmp != 0)
        
{
            result 
+= tmp % 10;
            tmp 
/= 10;
        }


        
if(result < MAX)
        
{
            flag[result] 
= true;
        }

    }


    
for(i = 1; i < MAX; i++)
    
{
        
if(flag[i] != true)
        
{
            printf(
"%d\n", i);
        }

    }


    
return 0;
}