C語言求水仙花數代碼解析

2021-02-19 Linux公社
水仙花數

「水仙花數」又稱為「阿姆斯特朗數」。如果一個n(n≥3)位數的各位數字的n次冪之和等於該數本身,則該數稱為「水仙花數」。

問題描述

輸出所有的「水仙花數」,所謂的「水仙花數」是指一個三位數其各位數字的立方和等於該數本身,例如153是「水仙花數」,因為:153 = 13 + 53 + 33。

問題分析

根據「水仙花數」的定義,判斷一個數是否為「水仙花數」,最重要的是要把給出的三位數的個位、十位、百位分別拆分,並求其立方和(設為s),若s與給出的三位數相等, 三位數為「水仙花數」,反之,則不是。

算法設計

「水仙花數」是指滿足某一條件的三位數,根據這一信息可以確定整數的取值範圍是 100〜999。對應的循環條件如下:

for(n=10; n<1000; n++)
{
    //.
}

對代碼的說明:

對於每個位置上的數值將其拆分的算法有很多種,根據不同情況選擇不同算法(對於同一問題不同算法的效率有時會相差很多)。

下面是完整的代碼:

#include <stdio.h>
int main()
{
    int hun, ten, ind, n;
    printf("結果是:");
    for( n=100; n<1000; n++ )  /*整數的取值範圍*/
    {
        hun = n / 100;
        ten = (n-hun*100) / 10;
        ind = n % 10;
        if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)  /*各位上的立方和是否與原數n相等*/
            printf("%d  ", n);
    }
    printf("\n");
 
    return 0;
}

運行結果

於是,100~999範圍內(三位數中)的「水仙花數」得到:153,370,371,407。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-11/155571.htm

相關焦點

  • C語言編寫程序求水仙花數
    C語言編寫程序求水仙花數水仙花數是一個數學問題,其實質是一個三位數,個位數的立方加十位數的立方加百位數的立方之和等於這個三位數本身。例如153=1*1*1+5*5*5+3*3*3,即153=1+125+27。
  • 求1000以內的水仙花數
    看知乎上有朋友說還不明白怎麼判斷水仙花數,今天我們就來看看這個問題。(PS:「求1000以內的水仙花數」這道題阿湯哥記憶猶新。到現在還記得這是我大一上學期期末考試的編程題。)首先給出水仙花數定義。怎麼判斷一個三位整數是不是水仙花數呢?我們根據它的定義來判斷,只要把個位數、十位數、百位數分別取出來,然後做立方和,判斷立方和是否等於這個數本身。現在難點在於,怎麼編程求一個三位數的個位數、十位數、百位數?
  • C語言 | 輸出水仙花數
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • Python基礎知識:善用列表推導式,優雅求解水仙花數
    在For循環中,對100-999之間的任意一個整數i,逐個分解出其個位數a、十位數b和百位數c,比較a、b、c三個數字的3次冪之和是否等於i本身,若等於,則將i添加到列表x中3.最後輸出的x即為求解的所有水仙花數代碼如下圖所示:注意,在將一個整數i分解出個位數a、十位數b和百位數c時,個位數a是i除以10後得到的餘數,百位數c是i除以100後得到的餘數,而十位數則是先將i整除10後得到整數部分,再將整數部分除以10後得到的餘數數即為十位數
  • C語言求最大公約數代碼及解析
    問題描述從鍵盤輸入兩個整數,求任意兩個正整數的最大公約數(GCD)。
  • C語言中10個經典的算法,學會它,利用它
    (2) 列印出所有的「水仙花數」,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數本身。(4) 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?程序原始碼:
  • C++刷題基礎篇:找水仙花數
    題目描述求出100至999範圍內的所有水仙花數。所謂水仙花數,就是指各位數字立方之和等於該數的數;a^3稱為a的立方,即等於a×a×a的值。例如:因為153=1^3+5^3+3^3,所以153是一個水仙花數。
  • C語言求梅森素數代碼及解析
    試求出指數n<20的所有梅森素數。問題分析要編程求解的問題是找出指數n<20的所有梅森素數。根據梅森素數的定義,我們可以先求出n<20的所有梅森數,再逐一判斷這些數是否為素數。如果是素數,則表示該數為梅森素數,列印輸出即可;否則不是梅森素數。算法設計要求出n<20的所有梅森數,因此在本題的算法設計中需要釆用循環結構。
  • 水仙花數的簡單思維和Python設計方法
    1.概念理解:要設計程序輸出「水仙花數」,就需要知道「水仙花數」的概念。我們把一個三位數其各位數字的立方和等於該數本身的數字稱為「水仙花數」。例如,153是「水仙花數」,因為153=1*1*1+5*5*5+3*3*3。
  • C語言求回文素數代碼及解析
    兩位回文素數:11三位回文素數:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929本題要求解的問題是:求出所有不超過1000的回文素數。問題分析本題要使用判斷素數的方法,並且要解決如何求一個整數的迴文數。
  • java程序之水仙花數
    在我們編程裡面的循環這一方面,肯定少不了「水仙花數」這樣的一個程序,在學校裡面老師應該會讓你做一個「水仙花數」這樣的程序。小編當時就被一個這樣的程序搞得滿頭霧水。根本沒有思路呀!等學完之後才明白原來是這個樣呀,茅塞頓開。
  • 【我是程式設計師】C語言的學習基礎,100個經典的算法(一)
    」,所謂「水仙花數」是指一個三位數,其各位  數字立方和等於該數本身。B':'C');   printf("%d belongs to %c",score,grade);  }  題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。程序分析:利用輾除法。
  • 寫出高效優美的單片機C語言代碼
    程序能跑起來並不見得你的代碼就是很好的c代碼了,衡量代碼的好壞應該從以下幾個方面來看1,代碼穩定,沒有隱患。a=a%8;可以改為:a=a7;說明:位操作只需一個指令周期即可完成,而大部分的C編譯器的「%」運算均是調用子程序來完成,代碼長、執行速度慢。通常,只要求是求2n方的餘數,均可使用位操作的方法來代替。
  • Scratch之思維訓練一:水仙花數的計算
    而不好的一點,是一些機構花了許多時間,甚至一個課程學期的時間,來對程式語言基本語法和圖形化模塊進行教學。 幼兒編程在於思維訓練因為幼兒編程最大的重點在於思維訓練和興趣培養,這也是為什麼我們使用Scratch和其他一些圖形化程式語言的原因:可以最大程度的降低對語法的依賴。
  • C 語言經典算法
    C語言作為多數工科學校編程入門的教學工具語言,是很多朋友開啟編程世界大門的鑰匙。
  • Python編程之水仙花數
    定義:水仙花數只是自冪數的一種,嚴格來說3位數的3次冪數才稱為水仙花數。「水仙花數」 ,所謂「水仙花數」是指一個三位數,其各位數字立方和等於該數本身。例如:153 是一個「水仙花數」 ,因為 153=1 的三次方+5 的三次方 +3 的三次方。
  • 水仙花數
    近日,筆者的學生問了筆者這樣一道題:求滿足
  • C語言中「c=a+b」,這種結構合理嗎?
    C語言會同意一些"令人震驚"的結構,下面的結構是合法的嗎,我們來看看幾個例子。 c = a+++b; 以下代碼是合法的嗎,咋的一看不禁有這樣的疑問?
  • C語言求高次方數的尾數代碼解析
    問題描述求13的13次方的最後三位數。
  • 「每日一練」巧用python列印出所有的「水仙花數」
    "水仙花數"估計很多小夥伴看到都會懵吧,這個概念比較小眾,但其實本文主要講述的是python如何從眾多數裡邊篩選出符合條件的數!下邊我們就一起來看看python是怎麼輸出的?題目列印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。