雷劈数,定义为:若正整数X(在n进位下)的平方可以分割为二个数字,而这二个数字相加后恰等于X,那么X的平方就是(n进位下的)一个雷劈数,又称卡布列克数。例如55^2=3025,而30+25=55,那么3025就是一个雷劈数。
最小的雷劈数:81
问题:找到以内的所有雷劈数
思路:雷劈数开方出来必然是整数,因此i从9开始(因为最小的为81,sqrt(81)=9),一直到sqrt()=1000,这样可以减少循环次数。每一次循环,先确定i^2的位数,记为count,再分别按顺序将高位和低位分别赋给left和right,最后根据雷劈数定义进行判断。
代码:
#include<stdio.h> #include<math.h> int main() {
int i, x, count = 0; int left, right; printf("10到之内的雷劈数有:\n"); for (i = 3; i < 1000; i++) {
x = i * i; while (x) {
x = x / 10; count++; } x = i * i; for (int j = 1; j < count; j++) {
left = x % ((int)pow(10, j)); right = x / ((int)pow(10, j)); //关键步骤 if (left + right == i) {
printf("%d\n", x); break; } } } return 0; }
建议使用vs运行,我用cb运行时结果出错,可能是编译器版本问题
vs 2017运行结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96220.html