【问题标题】:Need help writing a java program that adds multiple digits?需要帮助编写一个添加多个数字的 java 程序吗?
【发布时间】:2015-03-31 01:21:12
【问题描述】:

我正在尝试编写这个 java 程序,它要求用户输入一个数字并计算一个数字的位数并将每个数字乘以它的十进制值。例如我输入 546:程序应该说这个数字有 3 位数字,应该相乘:
5*100=500
4*10=40
1*6=6

到目前为止,这是我的代码:我在使用此代码时遇到的问题是它没有计算正确的位数。如果我输入 545,它说只有一位数字,当它进入除法时,它没有给出正确的答案。

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please enter a number: ");
    int n = keyboard.nextInt();
    int i;
    for (i = 0; n > 0; i++) {
        n /= 10;
        for (i = 0; n > 0; i++) {
            n /= 10;
            System.out.println((n%100000) / 10000);
            System.out.println((n%10000) / 1000);                 
            System.out.println((n%1000) / 100);
            System.out.println((n%100) / 10);
            System.out.println(n%10);
        }
        System.out.println("Number of digits: " + i);
    }
}

【问题讨论】:

  • 你能看到当你调用 nextInt() 时它会如何读取 545 作为值为 545 的单个整数。你想找到输入的长度(可能读取为字符串),并且然后分离出来:如果有3个数字,第一个是百,第二个是十,第三个是个。

标签: java


【解决方案1】:

问题是您有一组嵌套的 for 循环,它们都调用 n /= 10。更容易查看是否缩进所有内容:

public static void main(String[] args) {
     Scanner keyboard = new Scanner(System.in);

     System.out.print("Please enter a number: ");
     int n = keyboard.nextInt();
     int i;
     for (i = 0; n > 0; i++) {
         n /= 10;

         for (i = 0; n > 0; i++) {
             n /= 10;
             System.out.println((n%100000) / 10000);
             System.out.println((n%10000) / 1000);                 
             System.out.println((n%1000) / 100);
             System.out.println((n%100) / 10);
             System.out.println(n%10);
         }
         System.out.println("Number of digits: " + i);
     }
 }

删除此代码后,代码似乎按预期工作,并告诉您 545 确实,实际上有 3 位数字。这是修改后的代码:

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);

    System.out.print("Please enter a number: ");
    int n = keyboard.nextInt();
    int i;

    for (i = 0; n > 0; i++) {
        n /= 10;
        System.out.println((n%100000) / 10000);
        System.out.println((n%10000) / 1000);                 
        System.out.println((n%1000) / 100);
        System.out.println((n%100) / 10);
        System.out.println(n%10);
    }

    System.out.println("Number of digits: " + i);

}

【讨论】:

    【解决方案2】:

    似乎您试图通过使用任意值来完成相同的任务。而是尝试合并某种通用算法。在这个发布的例子中有些东西:

    public class CountDigits {
    
        private void performTask () {
            int number = 546;
            int temp = number;
            int digit = 0;
            int counter = 1;
            while ( temp != 0 ) {
                digit = temp % 10;
                System.out.println ( digit + " * " + getMultiplier ( counter ) + " = " + ( digit * getMultiplier ( counter ) ) );
                ++counter;
                temp /= 10;
            }
        }
    
        private int getMultiplier ( int power ) {
            int value = 1;
            for ( int i = 1; i < power; ++i ) {
                value *= 10;
            }
    
            return value;
        }
    
        public static void main ( String[] args ) {
            new CountDigits ().performTask ();
        }
    
    }
    

    输出:

    C:\Mine\java\bin>java CountDigits
    9 * 1 = 9
    1 * 10 = 10
    1 * 100 = 100
    1 * 1000 = 1000
    
    
    C:\Mine\java\bin>java CountDigits
    6 * 1 = 6
    4 * 10 = 40
    5 * 100 = 500
    

    【讨论】:

      【解决方案3】:
      int n = 546;
      for( int i = 0, dig = (int) Math.log10( n ) + 1; i < dig; ++i )
      {
          int mult = (int) Math.pow( 10, dig - i - 1 );
          int a = (n / mult) % 10;
          System.out.println( a + " * " + mult + " = " + (a * mult) );
      }
      

      结果:

      5 * 100 = 500
      4 * 10 = 40
      6 * 1 = 6
      

      【讨论】:

        【解决方案4】:

        要获取用户输入的值的位数,您可以获取该值并在将其转换为字符串后检查该值的长度。这将为您提供数字的确切长度。

        例如,如果下面sn-p中的变量“uservalue”是用户输入的值,执行sn-p后的输出,将numberOfDigit打印为“3”。

        public static void main (String args[]){
            int uservalue=546;
            int numberOfDigit=0;
            String userValueinStr=String.valueOf(uservalue);
            numberOfDigit=userValueinStr.length();
            System.out.println("Number of digits in user entered value is::"+numberOfDigit );
        
            //Now as you got the no. of digits, you can go ahead and add the your logic of   multiplication
        }
        

        【讨论】:

          【解决方案5】:
          int n = 546;
          int exponent = (int) (Math.log10(n));
          
          for (int i = exponent; i >= 0; i--) {
              int displayNum = (n / (int) Math.pow(10, i)) * (int) Math.pow(10, i);
              System.out.println(displayNum);
              n = n - displayNum;
          }
          

          输出

          System.out﹕ 500
          System.out﹕ 40
          System.out﹕ 6
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-12-07
            • 2023-04-01
            • 2011-09-23
            • 2011-03-25
            • 2015-11-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多