本文介绍一种纯数学方法,通过计算位数和幂运算,将一个整数“拼接”到另一个整数的左侧(高位),实现如将 456 添加到 123 前得到 456123,全程避免字符串转换。
在数值处理中,有时需要将一个数字作为前缀“追加”到另一个数字的左侧(即高位),例如将 456 加到 123 前,得到 456123。与常见的右向拼接(如 num = num * 10 + digit)不同,左向拼接不能简单迭代累加,而需通过位数对齐实现:先确定前缀数字的位数,再将其左移(乘以对应幂次的 10),最后与原数相加。
✅ 核心原理
设待插入的前缀为 digits,被插入的原数为 num,目标是构造 finalNum = digits × 10ᵏ + num,其中 k 是 num 的位数(即 num 占据的十进制位宽)。
⚠️ 注意:此处“添加到前面”指 digits 成为高位部分,num 保持低位不变——这正是上述公式所表达的语义。
? 位数计算(关键步骤)
Java 中可通过 Math.log10 获取以 10 为底的对数,再取整加 1 得到位数:
int k = (int) Math.log10(num) + 1; // 当 num > 0
但需注意边界情况:若 num == 0,log10(0) 无定义,应单独处理(0 视为 1 位)。更健壮的写法是: