先前的思路是观察1-10的数,可以用纯暴力从2,6,10一直循环到1000000从而找出自身数,但是会超时。于是我就想,从一个数算出下一个数,如132->138,通过138->150这样由一个数得到另一个数。这样类似于筛选法,而且只要循环一边就可以得到答案了。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ 1000001
using namespace std;
const int SIZE = 1000001;
int vis[SIZE] = {0};
void init(int n)
{
int ans = n;
while(n)
{
int c = n%10;
n /= 10;
ans += c;
}
vis[ans] = 1;
}
int main()
{
int i;
for(i = 1 ; i <= MAX_; i++)
{
if(!vis[i])
{
printf("%d\n", i);
}
init(i);
}
return 0;
#include <stdlib.h>
#include <string.h>
#define MAX_ 1000001
using namespace std;
const int SIZE = 1000001;
int vis[SIZE] = {0};
void init(int n)
{
int ans = n;
while(n)
{
int c = n%10;
n /= 10;
ans += c;
}
vis[ans] = 1;
}
int main()
{
int i;
for(i = 1 ; i <= MAX_; i++)
{
if(!vis[i])
{
printf("%d\n", i);
}
init(i);
}
return 0;
}