21xrx.com
2024-12-27 20:44:00 Friday
登录
文章检索 我的文章 写文章
求解C++中的水仙花数m到n范围内的所有数
2023-07-09 10:23:11 深夜i     --     --
C++ 水仙花数 范围 求解

水仙花数是指一个三位数,其各个数字的立方和等于该数本身。例如,153就是一个水仙花数,因为1^3+5^3+3^3=153。现在,我们需要在C++中编写程序,求解输入的范围内所有的水仙花数。

首先,我们需要明确的是,所求范围内的所有数都必须是三位数。因此,我们需要使用两个循环语句,从m到n枚举所有可能的数。对于每一个数,我们需要判断其是否是水仙花数,如果是,就输出该数。

为了判断一个数是否是水仙花数,我们可以先使用数学方法,将该数的个位、十位、百位的数字分别取出来,然后计算它们的立方和,再与原数进行比较。但是,这种方法效率较低,因此我们可以考虑使用字符串的方法。

具体来说,我们将每一个数转换成字符串,然后将其各位数字转换成整数,计算它们的立方和,再与原数进行比较。如果相等,就说明该数是水仙花数。

下面是实现该程序的示例代码:


#include <iostream>

#include <string>

using namespace std;

int main()

{

  int m, n;

  cout << "请输入m和n的值:";

  cin >> m >> n;

  for (int num = m; num <= n; num++)

  {

    string str_num = to_string(num);  // 将整数转换成字符串

    int sum = 0;

    for (char ch : str_num)

    {

      int digit = ch - '0';  // 将字符转换成整数

      sum += digit * digit * digit;  // 计算各个数字的立方和

    }

    if (sum == num)  // 判断是否是水仙花数

    

      cout << num << " ";

    

  }

  cout << endl;

  return 0;

}

在运行该程序时,我们需要输入m和n的值,程序将输出所有在[m, n]范围内的水仙花数。值得注意的是,由于此程序使用了字符串的方法,其执行效率相对较高,可以处理较大的范围。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复