整数拆分 内存练习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