1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <iostream> using namespace std; int n,k; int solve1(){ int l = 0, r = n; while(l <= r){ int mid = (l + r) / 2; if (mid * mid <= n) l = mid + 1; else r = mid - 1; } return l - 1; } double solve2(double x){ if (x == 0) return x; for (int i = 0; i < k; i++) x = (x + n / x) / 2; return x; } int main(){ cin >> n >> k; double ans = solve2(solve1()); cout << ans << ' ' << (ans * ans == n) << endl; return 0; } |
假设 int 为32位有符号整数类型,输入的 n 是不超过47000的自然数、k 是不超过 int 表示范围的自然数,完成下面的判断题和单选题:
0 of 7 Questions completed
Questions:
You have already completed the quiz before. Hence you can not start it again.
Quiz is loading…
You must sign in or sign up to start the quiz.
You must first complete the following:
0 of 7 Questions answered correctly
Your time:
Time has elapsed
You have reached 0 of 0 point(s), (0)
Earned Point(s): 0 of 0, (0)
0 Essay(s) Pending (Possible Point(s): 0)
28、该算法最准确的时间复杂度分析结果为O(logn+k)。
29、当输入为“9801 1”时,输出的第一个数为“99”。
30、对于任意输入的 n,随着所输入 k 的增大,输出的第二个数会变成“1”。
31、该程序有存在缺陷。当输入的 n 过大时,第 10行的乘法有可能溢出,因此应当将 mid 强制转换为 64 位整数再计算。
33、当输入为“3 10”时,输出的第一个数最接近( )。
34、当输入为 “256 11” 时,输出的第一个数( )。