【问题标题】:Convert any number to one digit number将任意数字转换为一位数字
【发布时间】:2013-12-27 11:51:40
【问题描述】:

考虑数字 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。请帮助我。

【问题讨论】:

  • 使用相同函数的递归直到 numbet.toString().lenght()==1

标签: java


【解决方案1】:

您可以在 while 周围添加另一个循环,结束条件为 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);
}

【讨论】:

  • 如果你在 do-while 循环中初始化 prod,那么每次迭代都会将它的值重置为 1。我相信你应该在进入任何循环之前初始化 prod。
【解决方案2】:
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】:

    使用递归

    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
    }
    

    【讨论】:

      【解决方案4】:

      递归调用函数

        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);
      }
      }
      

      【讨论】:

      • 此代码不起作用。我想要这种类型的输出。 2467=2*4*6*7=336 336=3*3*6=54 54=5*4=20 20=2*0=0
      【解决方案5】:

      使成员函数产品返回一个int。然后代替 sn.product(x);

      int p = sn.product(x);
      while (p > 9)
      { 
          p = sn.product(t);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多