C++:罗列出1~100000000的所有雷劈数(算法优化版本)

来源:互联网 发布:网络机顶盒还是网络app 编辑:程序博客网 时间:2024/06/10 17:31

了解雷劈数原理,根据定义设计代码,有选择地遍历数据(开方为整数的数据),将符合情况的数据筛选输出.
代码如下:

# include <iostream># include <math.h># include <iomanip>using namespace std;void Judge(void) {    for (int i = 9; i < 10000; i++) { // 最小的雷劈数是81,所以从9开始遍历        int copy = i*i;  // 使用i*i代表雷劈树,可以减少循环次数,且根据定义,雷劈树开方为整数        int count = 0;        while (copy) { // 算出数字的位数            copy /= 10;            count++;        }        for (int j = 1; j < count; j++) { // 对数字进行切割比较(左、右)            int left, right;            left = i*i;            right = left % int(pow(10, j));  // 取模得右边部分            left = left / int(pow(10, j));  // 整除得左边部分            if ((left + right)*(left + right) == i*i) {                cout << i*i << endl;            }        }    }}int main(void) {    Judge();    return 0;}

输出结果:
雷劈树


以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!


0 0