变换次数

这道题目描述了一个数的变换过程,每次变换是将数的每位数字相乘,目标是变为个位数。例如,285经过一次变换变成80。需要求解达到个位数所需的最少变换次数。输入为不超过2,000,000,000的整数,输出为变换次数。示例中,285需要两次变换。存在的问题在于最初的实现未考虑数字的位数。" 127856922,16186590,FFmpeg视频过滤器详解:w3fdif、waveform等,"['音视频开发', 'FFmpeg', 'C++', '过滤器']

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

题目:

牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成2*8*5=80.
问题是,要做多少次变换,使得这个数变成个位数。

输入描述:
输入一个整数。小于等于2,000,000,000。

输出描述:
输出一个整数,表示变换次数。

输入例子:
285

输出例子:
2
首次实现代码:

package com.Main;

import java.util.Scanner;

public class dl变换次数 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int value=sc.nextInt();
        String s=String.valueOf(value);
        int len=s.toCharArray().length;
        int chengji=0;
        int count=0;
        //2,000,000,000
        while(value/10!=0){
            int gewei=value%10;
            int shiwei=((value-gewei)/10)%10;
            int baiwei=value/100;
            chengji=gewei*shiwei*baiwei;
            value=chengji;
            count++;
        }
        System.out.println(count);
    }
}

输出结果:
这里写图片描述
存在的问题:
直接想当然的算三位数,没有考虑位数这里写图片描述

正确代码:

import java.util.Scanner;

public class Main {

    public static String Mul(String str){
        int res = 1;
        char[] ch = str.toCharArray();
        for (int i = 0 ; i < ch.length ; i++){
        //char型数据在参与算术运算时,是按照其ASCII码表上字符对应的值
        //的整型,而不是字符.ch[0]='3'=51=48+3='0'+3,如果不减去'0'对
        //应的整型值,那么参与计算的就不是整数3了,而是字 符'3',即整数51.
            res *= (int)(ch[i]-'0');
        }
        return String.valueOf(res);
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        StringBuffer str = new StringBuffer(in.next());
        int res = 0;
        if (str.length() == 1){//只有一位,直接为0
            res = 0;
        }else{
            while(true){
                String tmp = Mul(str.toString());
                if (tmp.length() != 1){
                    res++;
                    str.delete(0, str.length());//str清空
                    str.append(tmp);//tmp赋值str
                }else{
                    res++;
                    break;
                }               
            }
        }
        System.out.println(res);
        in.close();
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值