题目:
牛牛想对一个数做若干次变换,直到这个数只剩下一位数字。
变换的规则是:将这个数变成 所有位数上的数字的乘积。比如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();
}
}