解题思路:
因为Case数据有点大,建表不太好,一个个数判断平方数大概也会超时,我们选择一个巧妙的方法获取
区间内平方数,区间值开方 获取某一段数再逐个平方存起来 就达成目的了( 注意区间起始点要向上取整 ),然
后分割判断即可。大概也不是很难。
参考代码:
#include <iostream> #include <cmath> using namespace std; /* 获取区间平方数 */ int find_Square(int start, int end, int squart[]) { int total = 0; for (int i = start; i <= end; i++) squart[total++] = i * i; return total; } /* 判断区间平方数 */ /* @param last 分割数字的后面部分 */ /* @param part 分割位数所用的模数 */ /* @param length 区间平方数的个数 */ void splice_Square(int squart[], int length) { for (int i = 0; i < length; i++) { int part = 10, temp = squart[i], last; while (temp / part > 0) { last = temp % part; temp /= part; /* 取开方丢弃小数 */ int sqrt_last = (int)sqrt(last); int sqrt_temp = (int)sqrt(temp); /* 0 不被当作平方数 */ if (last != 0 && temp != 0 && sqrt_last*sqrt_last == last && sqrt_temp*sqrt_temp == temp) { cout << squart[i] << endl; break; } /* part*10 进一步分割 */ part *= 10; /* 重置平方数 */ temp = squart[i]; } } } int main() { int start, end, square[1000]; cin >> start >> end; int length = find_Square(ceil(sqrt(start)), sqrt(end), square); splice_Square(square, length); return 0; }
0.0分
5 人评分
九宫重排 (C++代码)浏览:1325 |
简单的a+b (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:694 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:796 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:551 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:342 |
单词个数统计 (C语言代码)浏览:1009 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:466 |
10月月赛题解浏览:536 |
幸运数 (C++代码)浏览:2856 |
学生小黑 2021-03-05 11:17:33 |
251001超数据范围了 题目限定在10^6内
学生小黑 2021-03-05 11:19:32 |
奥在范围内,数岔劈了