1. 程式人生 > >C語言中求一個數的個位數,十位數...

C語言中求一個數的個位數,十位數...

求出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 <stdio.h>
#include <stdlib.h>
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 <stdio.h>
#include <stdlib.h>
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;

}