考虑数字2345.如果你乘以它的数字然后你得到数字120.现在如果你再次乘以120的数字然后你将得到0这是一位数。
import java.util.Scanner;
public class SmallestNum
{
int prod=1,sum=0;
void product(int m)
{
while(m!=0)
{
int a=m%10;
m=m/10;
prod=prod*a;
}
System.out.println(prod);
}
public static void main(String args[])
{
Scanner scn=new Scanner(System.in);
int x=scn.nextInt();
SmallestNum sn=new SmallestNum();
sn.product(x);
}
}
我可以从这段代码中获得120.但是我怎么能用120做同样的程序并得到答案0.Pls帮助我。
答案 0 :(得分:1)
你可以在你的周围添加另一个循环,结束条件为prod < 10
,即只有一个数字。
void product(int m)
{
int prod;
do {
prod = 1;
while(m!=0)
{
int a = m%10;
m = m / 10;
prod *= a;
}
System.out.println(prod);
} while (prod >= 10);
}
答案 1 :(得分:0)
使用递归
void product(int m)
{
if(m%10 == 0){
return;
}
while(m!=0)
{
int a=m%10;
m=m/10;
prod=prod*a;
}
System.out.println(prod);
product(prod);//repeat the procedure
}
答案 2 :(得分:0)
public int reduceToOneDigit(int inputNumber){
int result = 1;
while(inputNumber > 0){
result *= (inputNumber % 10);
inputNumber /= 10;
}
if (result > 9)
result = reduceToOneDigit(result);
return result;
}
所以基本上:乘以inputNumber的数字。如果结果有多个数字(因此结果> 9,至少为10),则对结果进行递归调用。
或者,使用do-while循环执行相同操作而不进行递归:
public int reduceToOneDigitNoRecursion(int inputNumber){
int result = 1;
do{
while(inputNumber > 0){
result *= (inputNumber % 10);
inputNumber /= 10;
}
}
while(result > 9);
return result;
}
答案 3 :(得分:0)
递归调用函数
if(String.valueOf(prod).length()>1){
product(prod)
}
完整代码
public class SmallestNum
{
int prod=1,sum=0;
void product(int m)
{
while(m!=0)
{
int a=m%10;
m=m/10;
prod=prod*a;
}
if(String.valueOf(prod).length()>1){
product(prod)
}
System.out.println(prod);
}
public static void main(String args[])
{
Scanner scn=new Scanner(System.in);
int x=scn.nextInt();
SmallestNum sn=new SmallestNum();
sn.product(x);
}
}
答案 4 :(得分:0)
使成员函数产品返回int。然后代替sn.product(x);
int p = sn.product(x);
while (p > 9)
{
p = sn.product(t);
}