Java【常见问题】得到一个整数的各位数字(多种解法)

本文记录了在Java中获取整数各位数字的三种方法:末位取余法、整除法和转字符串法。通过创建getDigits1、getDigits2和getDigits3方法,将整数转换为包含各位数字的数组,并通过测试验证了方法的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java【常见问题】得到一个整数的各位数字

遇到几个题都需要得到一个整数的各位数字,现记录一下,有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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值