1 #include <iostream>
2 using namespace std;
3
4 long long n, ans;
5 int k, len;
6 long long d[1000000];
7
8 int main() {
9 cin >> n >> k;
10 d[0] = 0;
11 len= 1;
12 ans = 0;
13 for (long long i = 0; i <n; ++i) {
14 ++d[0];
15 for (int j = 0; j + 1<len; ++j) {
16 if (d[j] == k) {
17 d[j] = 0;
18 d[j + 1] += 1;
19 ++ans;
20 }
21 }
22 if (d[len - 1] == k) {
23 d[len - 1] = 0;
24 d[len] =1;
25 ++len;
26 ++ans;
27 }
28 }
29 cout << ans << endl;
30 return 0;
31 }
问题:若 k=1,则输出 ans 时,len=n。( )
为什么是错?
解析这么说,但是我不理解:
不存在1进制,那k为1时相当于做了什么呢? 第1轮,d变为{1},内层for循环不工作,后面的if导致进位,dd变成{0,1},len为2。 第2轮,d变成{1,1},内层for循环启动,d变成{0,2},后面的if不成立,不发生进位。之后每轮都像第2轮一样,不会发生进位, n轮后,d变为{0,n},len依然为2。 第一问是错误的。