遇到几个题都需要得到一个整数的各位数字,现记录一下,有3种解法:1.末位取余法,2.整除法,3.转字符串法。
创建了3个方法,均传入一个整型数,返回存有各位数字的数组。方法名分别为:getDigits1,getDigits2,getDigits3,分别对应3种解法。
方法1:末位取余法
请看下图中的计算过程,将该数不断除以10,得到的商继续除以10,直到商为0,每次除法得到的余数,顺序反过来,就是每位数字。
//末位取余法
//不断除以10,得到的商继续除以10,直到商为0,每次除法得到的余数,顺序反过来,就是每位数字
public static int[] getDigits1(int num) {
//取绝对值
num = Math.abs(num);
//得到该数的位数
int length = (num+"").length();
//创建数组,存放各位数字
int[] digits = new int[length];
//数有多长,就会做几次除法
for (int i=0;i<length;i++) {
//商
int quotient = num/10;
//余数
int remainder = num%10;
digits[length-1-i] = remainder;
//商作为下次除法的被除数
num = quotient;
}
return digits;
}
这样效率要高一些,不先将其转为String得出其长度,而是用商不为0作为循环条件:
//末位取余法
//不断除以10,得到的商继续除以10,直到商为0,每次除法得到的余数,顺序反过来,就是每位数字
public static int[] getDigits1(int num) {
//取绝对值
num = Math.abs(num);
//创建数组,存放各位数字
int[] digits = new int[length];
int sum =0;
int quotient;
int remainder;
//数有多长,就会做几次除法
do{
//商
quotient = num/10;
//余数
remainder = num%10;
digits[length-1-i] = remainder;
//商作为下次除法的被除数
num = quotient;
}while (quotient != 0);
return digits;
}
方法2:整除法
请看整除法的计算过程:
(计算得到12359的各位数字,加粗部分为它的各位数字。)
- 12359/10000=1,12359-1*10000=2359;
- 2359/1000=2,2359-2*1000=359;
- 359/100=3,359-3*100=59;
- 59/10=5,59-5*10=9;
//整除法
public static int[] getDigits2(int num) {
//取绝对值
num = Math.abs(num);
//得到该数的位数
int length = (num+"").length();
//创建数组,存放各位数字
int[] digits = new int[length];
//做length-1次除法
for (int i=0;i<length-1;i++) {
//先做除法
int quotient = (int) (num/Math.pow(10, length-1-i));
digits[i] = quotient;
//再做减法
int difference = (int) (num- Math.pow(10, length-1-i)*quotient);
//得到的差作为下次除法的被除数
num = difference;
//最后一次除法之后的减法,所得差是最后一位数字
if (i == length-2) {
digits[length-1] = difference;
}
}
return digits;
}
方法3:转字符串法
将整型数(int)转化为字符串(String),利用String的方法,再转化为字符数组(char[ ]),再转化为整型数组(int[ ])。
//转字符串法
//将整数转化为字符串,再转化为char数组,再转化为int数组
public static int[] getDigits3(int num) {
//取绝对值
num = Math.abs(num);
//得到该数的位数
String str = num+"";
int length = str.length();
//创建数组,存放各位数字
int[] digits = new int[length];
char[] chars = str.toCharArray();
for (int i = 0;i<chars.length;i++) {
//char转化为int,利用ASSCII码的差值,直接用char的值减去‘0’就行了
digits[i] = chars[i]-'0';
}
return digits;
}
测试
编写一个print方法,打印int数组里的每个元素。
//遍历打印数组
public static void print(int[] digits) {
for (int i=0;i<digits.length;i++) {
System.out.print(digits[i]+" ");
}
System.out.println();
}
main方法里调用3个方法:getDigits1,getDigits2,getDigits3,传入的参数均为123459。
public static void main(String[] args) {
print(getDigits1(123459));
print(getDigits2(123459));
print(getDigits3(123459));
}
结果如下,正确。
参考资料:
https://blog.csdn.net/weixin_43311389/article/details/82919629