将一个整数的每位数分解并按逆序放入一个数组中(要求用递归算法)
/**
* @author sunxiao
* 将一个整数的每位数分解并按逆序放入一个数组中(要求用递归算法)
*
*/
public class Reversal {
public static int revertsal(int rs[],int i,int num){
if(i<rs.length){
rs[i]=num%10; //将数字的最后一位放入数组
num=(num-num%10)/10; //去掉最后一个已放进数组的数字
return revertsal(rs,i+1,num); //递归调用
}else{
return 0;
}
}
public static void main(String[] args) {
int num=1234567; //定义一个整数
String number=num+""; //将整数转化为字符串,以便获得数字的个数,是后面的数组定义大小
int rs[]=new int[number.length()];
revertsal(rs,0,num); //调用逆序方法
for (int i : rs) {
System.out.print(i);
}
}
}
-----------------------------------------------------------------------------------------------------------------------------------------
//课堂上突现灵感,想到之前董姐的问题:抓取整数的每位数字并归入数组; //完全可以不依赖java.lang.Math来解决,代码也更清晰; import java.util.Scanner; class Noname2 { public static void main(String[] args) { System.out.println("请给定一个5位正整数"); Scanner input=new Scanner(System.in); int n=input.nextInt(); //抓取用户输入的整数,把它赋值给自定义的变量n int array[ ]=new int[5]; //创建一个具有5个元素的数组array[ ] int m=1; //创建一个变量m, 通过下面的for循环可知道m的作用是 //每次循环乘10翻倍: 1, 10, 100, 1000, 1000 for ( int i=0; i<array.length ;++i ) { array[i]= n/m %10; //把输入数字 除以m ,后, 再除以10,取余数, m*=10; //每次循环扩大为10倍; /*根据以上那两行,问题完全搞定; 假设输入数字为12345, 第一次循环,即i=0时,数字12345/m,此时m=1,得12345, 继续进行对10求余数, ( 12345 %10=5 ), 获得最末位数字5; 第二次循环,即i=1时,数字12345/m,此时m经过上次循环的m*=10后, m为10, 所以( 12345/m=1234 ), 继续对10求余, (1234 %10=4),获得倒数第二位数字4; 第三次循环,m再次乘10 变成100,( 12345/m=123 ), 继续对10求余, ( 123 %10=3 ), 获得倒数第三位数字3; 如此继续循环至数组最大长度,即 i<array.length,循环完毕 */ System.out.println ("第"+(5-i)+"位数字是 "+array[i]); } //大功告成, 编译,运行,试试 :) } }