Java课程作业:不使用字符串方法分离产品型号编码前两位数字
不用字符串方法拆分产品型号编码的解决方案
没问题,这个需求用纯数学运算就能完美解决,完全不用碰任何字符串相关的方法。我给你拆解思路和可直接运行的代码:
核心思路
因为你的型号编码是纯数字(6-9位),所以我们可以用除法和取余运算来拆分每一部分——这是处理数字拆分的经典技巧,完全避开字符串操作。
具体步骤
- 先确定数字的总位数:比如输入是
123456(6位),我们需要先算出它有多少位,这样才能知道要除以10的多少次方来提取对应位置的数字。 - 提取第一位数字(类别c):用原数字除以
10^(总位数-1),比如6位数字就除以10^5=100000,得到的整数就是第一位。 - 提取第二位数字(产品p):先把原数字除以
10^(总位数-2)(比如6位就是10^4=10000),得到前两位组成的数,再对10取余,结果就是第二位。 - 提取剩余型号编号:用原数字对
10^(总位数-2)取余,得到的就是去掉前两位后的剩余部分。
Java代码实现
public class ModelCodeSplitter { public static void main(String[] args) { // 示例输入:可以替换成任意6-9位的数字 long modelCode = 987654321; // 用long更稳妥,避免9位数字接近int上限的问题 long temp = modelCode; int digitCount = 0; // 步骤1:计算数字的总位数 while (temp != 0) { temp /= 10; digitCount++; } // 计算需要的10的幂次,注意转成long避免精度丢失 long powerForFirstDigit = (long) Math.pow(10, digitCount - 1); long powerForSecondDigit = (long) Math.pow(10, digitCount - 2); // 提取各部分 int category = (int) (modelCode / powerForFirstDigit); // 第一位(类别c) int product = (int) ((modelCode / powerForSecondDigit) % 10); // 第二位(产品p) long remainingModelNumber = modelCode % powerForSecondDigit; // 剩余型号编号 // 输出结果 System.out.println("类别(c): " + category); System.out.println("产品(p): " + product); System.out.println("剩余型号编号: " + remainingModelNumber); } }
关键细节说明
- 为什么用long?:虽然9位数字的最大值
999999999小于int的上限2147483647,但用long可以避免万一输入接近int上限时的溢出问题,更稳妥。 - 位数计算的循环:通过不断将数字除以10直到变为0,统计循环次数就是总位数,完全没有用到任何字符串方法。
- Math.pow的类型转换:
Math.pow返回的是double类型,直接转成long可以避免浮点数精度问题,确保幂次计算准确。
你可以把示例中的modelCode换成任意6-9位的数字测试,结果完全符合需求。
内容的提问来源于stack exchange,提问作者Yann Sanche EuroLife
相关产品推荐
相关产品推荐

