21xrx.com
2024-11-22 03:55:32 Friday
登录
文章检索 我的文章 写文章
使用C++求解所有的水仙花数
2023-07-13 14:46:28 深夜i     --     --
C++ 水仙花数 求解

水仙花数,即自幂次数和等于原数的三位数。例如153 = 1^3 + 5^3 + 3^3,因此153是一个水仙花数。如果使用暴力枚举的方法,虽然可以得出所有水仙花数,但优化后的算法可以大大提高程序的效率。

下面是使用C++语言求解所有的水仙花数的代码:


#include <iostream>

using namespace std;

int main() {

  for (int i = 100; i < 1000; i++) {  //从100开始枚举到999

    int a = i / 100;  //分离出百位数

    int b = (i / 10) % 10;  //分离出十位数

    int c = i % 10;  //分离出个位数

    if (a * a * a + b * b * b + c * c * c == i)  //判断是否为水仙花数

      cout << i << " ";

    

  }

  cout << endl;

  return 0;

}

这个程序使用循环从100到999进行枚举,然后通过取模运算分离出百位数、十位数和个位数,最后判断是否为水仙花数。如果是就输出该数,否则继续枚举下一个数。

这个程序的时间复杂度是O(900),因为枚举了900个数。虽然这个程序的运行时间不会很长,但是我们可以使用一些优化技巧来进一步提高程序的效率。例如可以将三个数的自幂次方预计算出来,避免在每次枚举时进行重复计算。另外,我们也可以使用效率更高的位运算来代替除法和取模运算,在大数据量的情况下可以得到更显著的效果。

总之,使用C++语言可以很容易地求解所有的水仙花数。虽然暴力枚举可以得到正确的结果,但是使用优化后的算法可以更快地处理大数据量的情况,提高程序的效率。

  
  

评论区

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