C語言中求一個數的個位數,十位數...
阿新 • • 發佈:2018-11-03
求出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; }