C语言:如何将long类型数字的各位拆分到数组中?
拆分Long类型数字的各位数字到数组的解决方案
问题分析
你之前用取模运算的方法忽略了0,大概率是因为提取每一位的逻辑有漏洞——比如没有正确处理某一位为0的情况,导致这些0没有被存入数组。下面给两种可靠的解决方法:
方法一:修正取模+除法的逐位提取法
这种方法通过循环提取最后一位数字,不会遗漏任何0,最后反转列表得到正确顺序:
long num = 4003607001000014L; List<Integer> digitList = new ArrayList<>(); // 单独处理数字为0的情况 if (num == 0) { digitList.add(0); } else { // 从后往前提取每一位 while (num > 0) { // 取最后一位数字 digitList.add((int) (num % 10)); // 去掉最后一位 num = num / 10; } // 反转列表得到从左到右的顺序 Collections.reverse(digitList); }
执行后digitList就是你要的[4, 0, 0, 3, 6, 0, 7, 0, 0, 1, 0, 0, 0, 0, 1, 4]。
方法二:字符串转换法(更简洁直观)
把Long数字转成字符串后遍历每个字符,直接转成整数存入数组,逻辑简单不易出错:
long num = 4003607001000014L; String numStr = String.valueOf(num); int[] digitArray = new int[numStr.length()]; for (int i = 0; i < numStr.length(); i++) { // 字符转整数:利用ASCII码差值 digitArray[i] = numStr.charAt(i) - '0'; }
这种方法不需要处理反转,直接得到顺序正确的数组,完全不会遗漏0。
内容的提问来源于stack exchange,提问作者naber
相关产品推荐
相关产品推荐

