/*
* POJ_1316.cpp
*
* Created on: 2013年10月24日
* Author: Administrator
*/
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 10001;
long long g[maxn];
//让每一个数的生成数是他自己
void prepare(){
int i;
for(i = 0 ; i < maxn ; ++i){\
g[i] = i;
}
}
//计算一个数字的数位和
long long sum_of_digit(long long n){
if(n < 10){
return n;
}
return n%10 + sum_of_digit(n/10);
}
void generate_sequence(long long n){
while(n < 10000){
long long next = n + sum_of_digit(n);
if(next > 10000 ||g[next] != next){//如果next已经超过上限||next已经有了一个生成数
return ;
}
g[next] = n;//next的生成数是n
n = next;
}
}
int main(){
prepare();
long long i;
for(i = 1 ; i < maxn ; ++i){
generate_sequence(i);
}
for(i = 1 ; i < 10000 ; ++i){
if(g[i] == i){//如果他是生成数
printf("%lld\n",i);
}
}
return 0;
}
(简单模拟——筛选法模拟2.2.1)POJ 1316 Self Numbers(生成数、自数)
最新推荐文章于 2023-05-09 17:36:46 发布