共48道题,当前是第9

初赛真题

01 #include <cstdio>
02 #define N 1005
03 using namespace std;
04 
05 int num[N];
06 
07 int main() {
08     int a1 = 1, n, x;
09     scanf("%d", & n);
10     num[1] = 1;
11     for (int i = 1; i <= n; ++i) {
12         x = 0;
13         for (int j = 1; j <= a1; ++j) {
14             num[j] = num[j] * 5 + x;
15             x = num[j] / 10;
16             num[j] %= 10;
17         }
18         if (x > 0) num[++a1] = x;
19     }
20     printf("0.");
21     for (int i = a1; i < n; ++i) {
22         putchar('0');
23     }
24     for (int i = a1; i >= 1; i--) {
25         printf("%d", num[i]);
26     }
27     putchar('\n');
28     return 0;
29 }

1. B。
2. B。
3. A。
4. B。
5. B。
6. A。

这段代码是在求 $(0.5)^n$ ,通过高精度的方式来将小数部分的非零数字储存了起来。其中第一个双重 for 循环就是在处理对这部分的高精度乘法。关于该段代码时间复杂度的计算,我们可以在这个双重循环内看出:复杂度与幂次和数字长度有关。在一般情况下,可以发现每多乘一次 $5$ ,数字长度基本上就会增加 $1$ ,所以长度基本是 $O(n)$ 级别的,所以复杂度为 $O(n^2)$

Question

1. 程序输出的是 $5^n$ 的值。( )

2. 程序执行到第 27 行 putchar('\n'); 时,i 的值为 。( )

3. 对于任意 $1 \leq i \leq a1$ ,都有 $0 \leq num \leq 9$ 。( )

4. 程序输出的是一个小数,且小数末尾可能有多余的 $0$ 。( )

5. 此程序的时间复杂度是( )

6. 若 n = 3 ,则输出为( )