Java 中交换数字的首位

2024 年 9 月 10 日 | 阅读 3 分钟

在本节中,我们将学习如何交换数字的首尾数字。

步骤 1:从用户处读取整数输入。第一步是从用户处读取一个整数输入。我们可以使用 Scanner 类来实现这一点。以下是一段读取输入的代码片段。代码创建了一个 Scanner 对象来从用户处获取输入,提示用户输入一个整数,并将其存储在变量 number 中。

步骤 2:提取首尾数字。要交换首尾数字,我们需要从数字中提取这些数字。我们可以通过使用数学运算来实现。

步骤 3:移除首尾数字。既然我们已经提取了首尾数字,我们就需要从原始数字中移除它们。我们可以通过除以然后乘以 10 的幂来实现。

步骤 4:打印带有交换数字的新数字。

SwapDigits.java

输出

Enter any number of two or more digits: 15489
95481

时间复杂度

读取输入:使用 in.nextInt() 从用户那里读取一个整数需要 O(1) 时间,因为这是一个单一的输入操作。

main() 方法中的计算

计算输入数字(k)的位数 while 循环会迭代 log10(x) 次,因为它会反复将 z 除以 10,直到 z 变为 0。因此,这部分的时间复杂度为 O(log10(x))。

诸如计算 num1、num2、num3 和 num4 等其他数学运算涉及基本的算术运算和指数运算 (pow),它们相对于输入数字的大小具有恒定的时间复杂度。因此,这些运算可以被认为是 O(1)。

总的来说,此代码的时间复杂度O(log10(x)),其中 x 是输入数字。

空间复杂度

整数变量(x、z、k、i、num1、num2、num3 和 num4)的内存都是整数,因此它们每个都占用恒定的内存量,即 O(1)。

Scanner 对象 (in) 占用少量内存来处理输入,但此内存使用量不依赖于输入数字的大小,因此也可以被认为是 O(1)。

因此,此代码的总体空间复杂度O(1),因为它使用的内存量是恒定的,与输入数字的大小无关。

不使用循环交换数字的首尾数字。

SwapDigits.java

输出

Enter any number of two or more digits: 15489
95481