C++ 求水仙花数

所谓水仙花数(NarcissisticNumber)是指一个3位数,其各位数字的立方和等于它本身。

思路:(1)将该数各位数字分解出来,然后求各数字立方和是否等于原数

          (2)凑3个数字,组成一个三位数,求各数字立方和是否等于凑成的数(注意百位数字从1开始)

例如153是“水仙花数”,因为:153 = 13 + 53 + 33

一、方法1:

#include <iostream>
#include <cmath>
using namespace std;

int main(int argc, const char * argv[]) {
    int n, unit, ten, hund; // unit, ten, hund分别存储个位、十位和百位的数字
    
    for(n = 100; n < 1000; n++) {
        unit = n % 10; // 得到n的个位数字
        ten = (n / 10) % 10; // 得到n的十位数字
        hund = n / 100; // 得到n的百位数字
        // 判断各位数字的立方和是否等于它本身
        if(n == hund * hund * hund + ten * ten * ten + unit * unit * unit)
        // if(n == pow(hund, 3) + pow(ten, 3) + pow(unit, 3))
            cout << n << " ";
    }
    cout << endl;
    return 0;
}

二、方法2:

#include <iostream>
using namespace std;

int main(int argc, const char * argv[]) {
    int sum;
    
    for(int i = 1; i < 10; i++)
        for(int j = 0; j < 10; j++)
            for(int k = 0; k < 10; k++) {
                sum = i * 100 + j * 10 + k;
                if(sum == (i * i * i + j * j * j + k * k * k))
                    cout << sum << " ";
            }
    cout << endl;
    return 0;
}

    运行结果:

### 关于C++实现水仙花的示例代码解释 #### 代码结构解析 在展示具体的代码之前,先了解程序的整体框架。这段代码旨在找出所有的三位范围内的水仙花并打印出来。 ```cpp #include <iostream> using namespace std; bool narcissus(int num) { int sum = 0, temp = num; while (temp != 0) { sum += pow(temp % 10, 3); temp /= 10; } return sum == num; } int main() { cout << "水仙花有: "; for (int i = 100; i < 1000; ++i) { if (narcissus(i)) cout << i << ' '; } cout << endl; return 0; } ``` 此段代码定义了一个名为`narcissus`的功能函用于检测给定字是否为水仙花[^2]。主函通过循环遍历从100到999之间的每一个整,并调用`narcissus()`来验证这些值是否满足条件;如果确实如此,则将其输出显示[^3]。 #### 函功能详解 - **`narcissus`函** 这个辅助方法接收一个参作为待测对象,内部逻辑如下: 1. 初始化变量`sum`用来累加每位上的立方值; 2. 使用临时副本`temp`保存原始输入以便操作而不改变原据; 3. 进入while循环直到处理完所有位,在每次迭代过程中计算当前最低位(即个位)上字三次幂的结果加入总和中,之后去除已处理过的低位继续下一轮运算; 4. 当整个过程结束时比较最终得到的新值与最初传入的那个是否相等——若相同则返回true表示这是一个有效的水仙花反之亦然[^4]。 #### 主要流程说明 对于每个位于区间\[100,999\]中的候选者\(i\)来说,都会经历上述提到的过程被逐一检验。一旦确认符合条件就立即经由标准输出流呈现给用户查看。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值