练习:水仙花数练习输出及错误

求出0~999之间的所有“水仙花数”并输出。
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。

/*
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/

这是我在日常练习中发现的一道题,我的想法是求出三位数的个位数,十位数,百位数然后利用每个数的立方和判断是不是水仙花数.
 

#include 
#include 
int main(){
	int i = 100;
	int a = 0;
	int b = 0;
	int c = 0;
	for ( i = 100; i < 1000; i++)
	{
		a = i %1000;
		b = i %100;
		c = i %10;
		if (i==a*a*a+b*b*b+c*c*c)
		{
			printf("%d\n", i);
		}
	}
	system("pause");
	return 0;
}

 但是经过编译发现结果不对,如果按照我的写法个位数可以,但是十位数,百位数就不对了.举个例子,如果三位数为123,个位数:123%10==3,但是十位数:123%100==23,后面的同样如此.经过这次,我发现我的思路还是不够严谨.

最后经过搜索加上自己的理解算十位数是,先给原数除以10,这样就可以让十位数相当与个位数,然后按照个位数的算法可以求出十位数.百位数以及更多的位数可以一次类推.

就这个题而言我最后改为

#include 
#include 
int main(){
	int i = 100;
	int a = 0;
	int b = 0;
	int c = 0;
	for ( i = 100; i < 1000; i++)
	{
		a = i / 100%10;
		b = i / 10%10;
		c = i / 1%10;
		if (i==a*a*a+b*b*b+c*c*c)
		{
			printf("%d\n", i);
		}
	}

	system("pause");
	return 0;

}

 

 

 

 

 

 

 

 

你可能感兴趣的:(练习)