首页 > 试题广场 >

变换次数

[编程题]变换次数
  • 热度指数:403 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 所有位数上的数字的乘积。比如285经过一次变换后转化成2*8*5=80.
问题是,要做多少次变换,使得这个数变成个位数。

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


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

输入

285

输出

2
一看这个数据范围感觉暴力模拟可以过,然后就试了一下,结果还真就过了
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

int transform(int x) {
    LL ans = 1;
    while(x) {
        ans *= x % 10;
        x /= 10;
    }
    return ans;
}

int main() {
    int x;
    cin >> x;
    int step = 0;
    while(x >= 10) {
        x = transform(x);
        step++;
    }
    cout << step << endl;
    return 0;
}

发表于 2023-02-02 17:40:32 回复(0)
importjava.util.Scanner;
publicclassMain {
    publicstaticvoidmain(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int num=scanner.nextInt();
        int count=0;//计数
        int last=num;//把num赋值给last以便获取到每一位上的数
        int n=1;//乘积
        while(num/10>=1){//当输入的数不是个位数时跳出循环
            n*=last%10;//算出每次的最后一位进行乘积
            last=last/10;//对原数进行移除个位处理
            if(last==0){//如果是最后一个数,说明已经把每一位都乘完了
                num=n;//把乘积赋值给num
                last=num;//把num继续赋值给last来进行每一位的获取
                n=1;//把乘积更新
                count++;//完整的依次乘积结束,计数+1
            }
        }
        System.out.println(count);
    }
}
发表于 2022-03-24 10:38:25 回复(0)
import java.util.*;
public class Main {
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int count=0;
            while(n>10){
                String s = n+"";
                if(s.contains("0")){
                    count++;
                    break;
                }else{
                    n =1;
                    for(int i=0;i<s.length();i++){
                        n = n*(s.charAt(i)-'0');
                    }
                    count++;
                }
            }
            System.out.println(count);
        }
}

发表于 2022-02-23 21:22:47 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int num = in.nextInt();
            int i=0;
            while((""+num).length()!=1) {
                String str=""+num;
                char [] arry=str.toCharArray();
                int n=1;
                for (char c : arry) {
                    n*=Integer.parseInt(c+"");
                }
                num=n;
                i++;
            }
            System.out.println(i);
        }
    }
}
发表于 2021-10-09 14:34:44 回复(0)
#include<iostream>
using namespace std;
int turn(int n)
{
    int num=0;
    while(n>9)
    {
        num++;
        int tmp=1;
        while(n)
        {
            tmp*=n%10;
            n/=10;
        }
        n=tmp;
    }
    return num;
}
int main()
{
    int n;
    cin>>n;
    cout<<turn(n)<<endl;
    return 0;
}

发表于 2021-08-12 15:05:28 回复(0)

def text():
    num_list = list((input()))
    long = len(num_list)
    res = 0
    while long > 1:
        n = 1
        for i in num_list:
            n *= int(i)
        res += 1
        num_list = list(str(n))
        long = len(num_list)
    print(res)

text()

发表于 2021-07-30 22:04:39 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long num = sc.nextInt();
        int count = 0;
        long temp = 1;
        while (num / 10 != 0) {
            //每次来把数字转成字符串
            //String s=Double.toString(num);
            //循环获取乘积
            count++;
            while (num % 10 != 0||String.valueOf(num).length()>1) {
                long now= num % 10;
                num=num/10;
                temp = temp * now;
            }
            num = temp;
            temp = 1;
        }
        System.out.println(count);
    }
}
发表于 2021-07-15 14:18:39 回复(0)
import java.util.Scanner;

public class  Main{

public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int number = scanner.nextInt();
        int count=0; //计数
        int newNumber=number;//新数字
        int add=1;
        while (newNumber>9){
            while (true){
                add=add*(newNumber%10);
                if(newNumber/10==0){
                    break;
                }
                newNumber=newNumber/10;
            }
            count++;
            newNumber=add;
            add=1;
        }
        System.out.println(count);

    }
}
发表于 2021-07-08 11:28:18 回复(0)