自私的数

在1949年印度数学家D.R. Daprekar发现了一类称作Self-Numbers的数。对于每一个正整数n,我们定义d(n)为n加上它每一位数字的和。例如,d(75)=75+7+5=87。给定任意正整数n作为一个起点,都能构造出一个无限递增的序列:n,d(n), d(d(n)), d(d(d(n))), . . . 例如,如果你从33开始,下一个数是33+3+3=39,再下一个为39+3+9=51,再再下一个为51+5+1=57,因此你所产生的序列就像这样:33,39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, . . .数字n被称作d(n)的发生器。在上面的这个序列中,33是39的发生器,39是51的发生器,51是57的发生器等等。有一些数有超过一个发生器,如101的发生器可以是91和100。一个没有发生器的数被称作Self-Number。如前13个Self-Number为1,3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97。

输入
No input for this problem.
输出
Write a program to output all positive self-numbers less than 10000 in increasing order, one per line.
#include<stdio.h>

int main()
{
	int i,j;
	int sum;
	int A,B;
	int flag;

	int temp;
	for(i=1;i<10000;i++)
	{
		A=i;
		for(j=i/2;j<i;j++)
		{
			flag=0;
			B=j;
			sum=0;
			while(B)
			{
				temp=B%10;
				sum=sum+temp;//依次把这个数的每一位的数字相加存储到sum中 
				B=B/10;//降位 
			}
			if((sum+j)==A)
			{
				flag=1;//不是自私的数 
				break;
			}
		}
		if(flag==0)//还是0的话就说明是自私的数 
			printf("%d\n",i);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绝地反击T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值