You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java课程作业:不使用字符串方法分离产品型号编码前两位数字

不用字符串方法拆分产品型号编码的解决方案

没问题,这个需求用纯数学运算就能完美解决,完全不用碰任何字符串相关的方法。我给你拆解思路和可直接运行的代码:

核心思路

因为你的型号编码是纯数字(6-9位),所以我们可以用除法和取余运算来拆分每一部分——这是处理数字拆分的经典技巧,完全避开字符串操作。

具体步骤

  1. 先确定数字的总位数:比如输入是123456(6位),我们需要先算出它有多少位,这样才能知道要除以10的多少次方来提取对应位置的数字。
  2. 提取第一位数字(类别c):用原数字除以10^(总位数-1),比如6位数字就除以10^5=100000,得到的整数就是第一位。
  3. 提取第二位数字(产品p):先把原数字除以10^(总位数-2)(比如6位就是10^4=10000),得到前两位组成的数,再对10取余,结果就是第二位。
  4. 提取剩余型号编号:用原数字对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:18:28