C++找雷劈数

    前几天知道了一种叫“雷劈数”的东西,比如3025,可以从中间劈开,编成30和25,然后相加得55,55的平方又得3025。

    今天的时间还比较空,所以想用C++编个小程序来找找看,顺便多熟悉下C++,平时的实验课太少了,呵呵。

    总共用了大概一共2~3个小时吧,呵呵,也许有点长了,新手也许都要经过这样一个过程吧。

 

    下面是代码,不知道N多年后回来看,会不会觉得这个写得很丑,呵呵。

    找的范围就是0到电脑能接受的最大的int值,先是一个一个挨着找的,太慢了,找了很久才找到25502500,后来请教了一下学长,发现其实只要找平方数就行了,改了一点点,然后结果就是瞬间就出来了 

 

#include <iostream> #include <vector> using namespace std; unsigned int n = 1, l = 0, r = 0; vector<int> num; void cut(int length){//把一个数n分成两半 l and r, 输入参数length已被减半 int i = 0; l = 0; r = 0; while(i < length){ for(int j = i; j > 0; j--) num[i] *= 10; r += num[i]; i++; } i = length; while(i < length * 2){ for(int j = i - length; j > 0; j--) num[i] *= 10; l += num[i]; i++; } } void judge(int l, int r, int n){//判断是否为雷劈数 int sum = l + r; if(sum * sum == n) cout << n << " = " << l << " & " << r << " ; " << l << " + " << r << " = " << sum << " ; " << sum << " * " << sum << " = " << sum * sum << endl; //这个输出稍微写得感觉长了点 } int main(){ while(n > 0){ int n2 = n * n; //求教学长后发现找平方数可以大大提高速度 int temp = n2; //避免修改n, temp拿进去要操作的 int length = 0; num.clear(); //每次循环vector需要清空 while(temp>0){ num.push_back(temp % 10); //把n分成一位一位的输入容器 temp /= 10; length++; } /* 换成只找平方数后发现这个没用了 if(length % 2 != 0){ //长度为奇数就跳过,能节约一点时间 n *= 10; continue; }*/ if(length % 2 == 0){ length /= 2; cut(length); judge(l, r, n2); } n++; if(n2 <= 0){ cout << "找得差不多了……" << endl; system("pause"); return 0; } } }

 

下面是运行结果

81 = 8 & 1 ; 8 + 1 = 9 ; 9 * 9 = 81
2025 = 20 & 25 ; 20 + 25 = 45 ; 45 * 45 = 2025
3025 = 30 & 25 ; 30 + 25 = 55 ; 55 * 55 = 3025
9801 = 98 & 1 ; 98 + 1 = 99 ; 99 * 99 = 9801
494209 = 494 & 209 ; 494 + 209 = 703 ; 703 * 703 = 494209
998001 = 998 & 1 ; 998 + 1 = 999 ; 999 * 999 = 998001
24502500 = 2450 & 2500 ; 2450 + 2500 = 4950 ; 4950 * 4950 = 24502500
25502500 = 2550 & 2500 ; 2550 + 2500 = 5050 ; 5050 * 5050 = 25502500
52881984 = 5288 & 1984 ; 5288 + 1984 = 7272 ; 7272 * 7272 = 52881984
60481729 = 6048 & 1729 ; 6048 + 1729 = 7777 ; 7777 * 7777 = 60481729
99980001 = 9998 & 1 ; 9998 + 1 = 9999 ; 9999 * 9999 = 99980001
找得差不多了……
请按任意键继续. . .

 

 

欢迎大家提出可以改进的地方,呵呵,新手上路,请多关照:-)

 

感觉C++中的vector相当的好用,呵呵

呵呵,感觉编出一个小程序还是挺有成就感的

同学当中也有很猛的编程大牛,自己现在离他们的距离还有点远,刚起步嘛,呵呵,继续努力!

你可能感兴趣的:(C++找雷劈数)