java:i+ii+iii+...+ni、水仙花数、判断数字是几位数/输出数字每位/逆序输出数字

1.s=a+aa+aaa+....如a=1 n=3 即 1+11+111=123  求和

//i*10^(count-1)+i

每一个数(如111,是 上一个数字+a*10^2,2是当前数的个数-1)

 public static int countN(int base,int count){
        double tmp = 0,res = 0;
        for (int i = 0; i < count; i++) {
            tmp = base*Math.pow(10,i)+tmp;
            res = res+tmp;//1   11 111
        }
        return (int)res;
    }

2、水仙花数:

//输出所有水仙花数 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
    //三位数 100~999 提取每位,按次方加和是否等于原数


    public static void ShuiXianHua(){
        int num[] = new int[3];
        for (int i=100;i<=999;i++){
            num[0] = i/100;//最高位
            num[1]=(i-num[0]*100)/10;//中位
            num[2]=i-num[0]*100-num[1]*10;
            if (Math.pow(num[0],3)+Math.pow(num[1],3)+Math.pow(num[2],3)==i)
                System.out.println(i);
        }
    }

3、判断数字是几位数、输出每一位、逆序输出每位

 .给出一个不多于5位的正整数,要求
 1 输出它是几位数
 2 分别输出每一位数字
 3按逆序输出各位数字,例如原数321,应输出123

1、基本思想是 int类型的,能除过则有值 如 500/100==5;除不过的值为0 ,如500/5000==0;

2、打印每位,先调用第一步的知道有几位,把每位存放在数组中,最后输出/逆序输出即可

        5421:

               5420%10==1  个位是1         5420/10=542 去除最低位的1  现在数num2 是542

              542%10==2    十位数2          542/10=54 去掉十位的2                              是54

              54%10==4       百位4            54/10==5 去掉百位的4                                 是5

              5%10==5         千位5            5/10=0                                                          是0

结束:{1,2,4,5}逆序输出数组即可。

3、逆序打印每位:把数组正序遍历即可

4、使用charAt方法,String str=Integer.toString();数组转为str,之后直接获取长度str.length就知道有几位数,

new个对应位的数组,每位用arr[i]=str.charAt(i);最后正序/逆序输出即可。

 public static int judegNumber(int num){
        int level = 0;
        if(  num/100000>=1||num<=0)
            return  0;
        if(num/10000>=1)
            level=5;
        else if(num/1000>=1)
            level=4;
        else if (num/100>=1)
            level=3;
        else if(num/10>=1)
            level=2;
        else level=1;
        return level;
    }

    public static void printPerBit(int num){
        if (num/10000>0||num<0)
            return;
        String str = Integer.toString(num);
        for (int i = 0; i <str.length() ; i++) {
            System.out.println(str.charAt(i));
        }
    }

    public static void exchageFirstandast(int num){
        int arr[] = new int[5];
        int num2 =num,bit =0;
        int i=0,leve =0;
        leve = judegNumber(num);
        while(num2!=0){
            bit = num2%10;//原数对10取余 拿到最低位
            arr[i++] = bit;//最低位写入数组
            num2=num2/10;//去掉最低位
        }//数组中的排列顺序 是从数的最低位开始,直接可以输出
        for (i=0;i<leve;i++){
            System.out.println(arr[i]);
        }
    }
    //直接使用charAt方法
    public static void exchageFirstandasString(int num){
        String str = Integer.toString(num);
        char c[]=new char[str.length()];
        for (int i = 0; i <str.length() ; i++) {
            c[i] = str.charAt(i);
        }
        for(int i= str.length()-1;i>=0;i--){
            System.out.println(c[i]);
        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

约翰兰博之西安分博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值