整数拆分 内存练习Q1 E03

Java 版

背景

关于整数拆分,我们写出了一个数组和循环的版本

1 2 3 4 5 6 7 8 9 10 11 12 13
int number = Console.readInt(); int[] digits = new int[3]; for (int i = 0; i < 3; i++) { digits[i] = number % 10; number = number / 10;} for (int i = 0; i < 3; i++) { int index = 2 - i; Console.println(digits[index]);}

这个时候 小可同学 说 “既然两个 for 语句的格式都一样,为什么不合并?”

于是小可写出了下面的代码

1 2 3 4 5 6 7 8 9 10
int number = Console.readInt(); int[] digits = new int[3]; for (int i = 0; i < 3; i++) { digits[i] = number % 10; number = number / 10; int index = 2 - i; Console.println(digits[index]);}

然而,结果却错了。

要求

请你

1. 对 小可的代码 走人工内存,画内存表

2. 求出 小可的代码 如果输入 319,会显示什么

3. 用文字解释,为什么小可的代码的结果有问题,逻辑层面解释。

参考案例

下面是 小可改之前的代码,以及对应的内存表

代码
1 2 3 4 5 6 7 8 9 10 11 12 13
int number = Console.readInt(); int[] digits = new int[3]; for (int i = 0; i < 3; i++) { digits[i] = number % 10; number = number / 10;} for (int i = 0; i < 3; i++) { int index = 2 - i; Console.println(digits[index]);}
内存
Line    
1       319                                 >   319
3       |       [0, 0, 0]
5       |       |           0               =   true
6       |       [9, 0, 0]   |   
7       31      |           |
8       |       |           |
5       |       |           1               =   true
6       |       [9, 1, 0]   |       
7       3       |           |   
8       |       |           |
5       |       |           2               =   true
6       |       [9, 1, 3]   |
7       0       |           |   
8       |       |           |
5       |       |           3               =   false
8       |       |           x
10      |       |           0               =   true
11      |       |           |       2       
12      |       |           |       |       <   3
13      |       |           |       x
10      |       |           1               =   true
11      |       |           |       1       
12      |       |           |       |       <   1
13      |       |           |       x
10      |       |           2               =   true
11      |       |           |       0       
12      |       |           |       |       <   9
13      |       |           |       x
10      |       |           3               =   false 
13      |       |           x
end     x       x
        number  digits      i       index

Python 版

背景

关于整数拆分,我们写出了一个列表和循环的版本

1 2 3 4 5 6 7 8 9 10
number = int(input()) digits = [] for i in range(3): digits.append(number % 10) number //= 10 for i in range(3): print(digits[2 - i])

这个时候 小可同学 说 “既然两个 for 语句的格式都一样,为什么不合并?”

于是小可写出了下面的代码

1 2 3 4 5 6 7 8
number = int(input()) digits = [] for i in range(3): digits.append(number % 10) number //= 10 print(digits[2 - i])

然而,结果却错了。

要求

请你

1. 对 小可的代码 走人工内存,画内存表

2. 求出 小可的代码 如果输入 319,会显示什么

3. 用文字解释,为什么小可的代码的结果有问题,逻辑层面解释。

参考案例

下面是 小可改之前的代码,以及对应的内存表

代码
1 2 3 4 5 6 7 8 9 10
number = int(input()) digits = [] for i in range(3): digits.append(number % 10) number //= 10 for i in range(3): print(digits[2 - i])
内存
Line    Variables                   Info
1       319
3       |       []
5       |       |           0
6       |       [9]         |
7       31      |           |
5       |       |           1
6       |       [9, 1]      |
7       3       |           |
5       |       |           2
6       |       [9, 1, 3]   |
7       0       |           |
9       |       |           0
10      |       |           |       <   3
9       |       |           1
10      |       |           |       <   1
9       |       |           2
10      |       |           |       <   9
        number  digits      i       

ZZAX 微信公众

文档一更新,立刻告诉你