您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言中怎么用簡單粗暴的方法找水仙花數的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言中怎么用簡單粗暴的方法找水仙花數文章都會有所收獲,下面我們一起來看看吧。
什么是水仙花數:
指一個n位數,其各位數字的n次方之和確好等于該數本身
例如:
1 1^1=1;
153 3^3+5^3+1^3=153;
問題:求0~100000之間的水仙花數,并打印出來
看題目,找突破口:
0~100000 我可以想到用循環來判斷0~10000間的數字
由栗子可知:我們需要求數字是幾位
要用到次方,則我們需要引用math函數庫里的pow函數
求和,依舊要使用循環
那么開始寫代碼,走一步思考一步:
#include <stdio.h> #include <math.h> int main() { int i = 0; for (i = 0; i <= 100000; i++) { int n = 1; // n 為位數 int z = i; //經過while后i改變,i未變前賦值給z,代替原值i進行后面的計算 while (z / 10 != 0) //這里剛開始直接用i進行運算 死循環 { n++; z=z / 10; //用i運算的話,當i=10時 i=i/10 直接等于1 ,死循環,所以用變量z代替i } if (i == Sum(i, n)) //判斷和是否等于原值 printf("%d ",i); } return 0; }
看代碼一定要看后面的注釋,這里要注意的點:
用了n代表位數,求n時while循環會改變i值,不利于后面的計算,所以用z代替
設置函數Sum來計算和,函數代碼如下:
int Sum(int x, int y) //x接收i,y接收n { int k = 0; int num = 0; int sum = 0; for (k=0;k<y;k++) //循環求和 { num = pow(x % 10, y); //取出每一位的數字,求次方 sum += num; //累加求和 x/=10; //去掉最低位的數字 } return sum; //返回和 }
完整代碼如下:
#include <stdio.h> #include <math.h> int Sum(int x, int y) { int k = 0; int num = 0; int sum = 0; for (k=0;k<y;k++) { num = pow(x % 10, y); sum += num; x/=10; } return sum; } int main() { int i = 0; for (i = 0; i <= 100000; i++) { int n = 1; int z = i; while (z / 10 != 0) { n++; z=z / 10; } if (i == Sum(i, n)) printf("%d ",i); } return 0; }
運行結果:
關于“C語言中怎么用簡單粗暴的方法找水仙花數”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言中怎么用簡單粗暴的方法找水仙花數”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。