将一个整数的每位数分解并按逆序放入一个数组中(要求用递归算法)

 

将一个整数的每位数分解并按逆序放入一个数组中(要求用递归算法)

 

/**
 * @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]);
                }     //大功告成, 编译,运行,试试  :)
        }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值