数字乘积为n的最小数字

时间:2014-08-09 13:01:03

标签: java

我需要找到数字数字乘积等于给定数字的最小数字。

import java.util.Scanner;

class timus_1014_2 {

    public static void main(String[] args){
        int[] arr = new int[10]; // eskan ban@  chem imanum inchi a statik,
        int prod = 1;
        int j = 0;

        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        for (int i = 2; i < 10; ++i){
            if (n % i == 0) {
                arr[j] = i;
                j++;
            }
        }
        prod =  prod * arr[j];

        System.out.print(prod);

    }
}

逻辑有问题,当我输入10它应该给25但是它给出0时,问题是什么。请提供如何使程序找到数字产品是给定数字的数字的想法。

6 个答案:

答案 0 :(得分:0)

我建议你看看每个错误都是一个一个修复它。我还建议您使用一个IDE,它会向您显示错误并输入,并有助于确保您没有大量错误,并且可以根据您的更正看出这些错误是否消失。

BTW通常当你使用一个数组代码时,通常会消除它,因为我怀疑它可以在你的情况下删除。

答案 1 :(得分:0)

静态方法无法访问类的非静态成员。 在你的情况下,prod是类的成员变量,但不是静态的。要修复错误,请尝试将prod设为静态。

private static int prod = 1;

我更愿意,如果没有其他方法正在使用它,请将其设为局部变量。

答案 2 :(得分:0)

这里的问题是你需要创建一个特定类的对象来调用与之关联的特定方法

import java.util.Scanner;

class DigPro {
static int[] arr = new int[10]; // eskan ban@  chem imanum inchi a statik,
int prod = 1;
public static void main(String[] args){
Scanner in = new Scanner(System.in);
DigPro obj = new DigPro();
obj.prime(in.nextInt());

}



public void prime(int n){
for (int i = 1; i < 10; ++i){
   for (int j = 0; j < 9; ++j) {
       if (n % i == 0) {

           arr[j] = i;

       }
   prod =  prod * arr[j];
   }

}
System.out.print(prod);
}

}

在这里你需要创建一个对象,说出DigPro类的obj,然后用该对象调用prime(int n)方法。你的除法是startint,零,改为一个

答案 3 :(得分:0)

如果我理解你的问题你需要一个数字乘积等于数字N的数字。既然你要求新的算法,你可以按照代码进行操作。

逻辑:

注意:对于素数小于10的数字

  1. 从9开始获取所有因子 - &gt; 2
  2. 添加到列表
  3. 反向打印或使用堆栈而不是列表
  4. import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    class Main {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.println("Enter number");
            int num = in.nextInt();
    
            List<Integer> lst = new ArrayList<>();
    
            for (int p = 9; p >= 2; p--) {
                while (num % p == 0) {
                    num /= p;
                    lst.add(p);
                }
            }
    
            String smallestNumber = "";
            for (int i = lst.size() - 1; i >= 0; i--) {
                smallestNumber = smallestNumber + lst.get(i);
            }
            System.out.println("Smallest number : " + smallestNumber);
        }
    }
    

    输出:

    Enter number
    10
    Smallest number : 25
    
    Enter number
    144
    Smallest number : 289
    
    Enter number
    12
    Smallest number : 26
    

答案 4 :(得分:0)

在上面的代码中,在为j指定值后,您将增加arr[j]。您应该执行以下操作: -

prod = prod * arr[j-1];

此处它会将prod乘以更新的最后一个数组。这就是你得零的原因。对于您的另一个问题找到数字数字产品等于给定数量的最小数字在此link处有类似答案。

答案 5 :(得分:0)

由于这实际上是一个非常有趣的问题,我花时间为所有可能的整数输入提出了正确的解决方案。

import java.util.*;

public class Main{

    public static void main(String[] args) {
        System.out.println("Enter number:");
        int number = new Scanner(System.in).nextInt();

        Stack<String> factors = new Stack<>();
        if(number==0){
            factors.push("0");
        }else if(number==1){
            factors.push("1");
        }else{
            for(int f=9;f>1;f--){
                while(number%f==0){
                    factors.push(Integer.toString(f));
                    number/=f;
                }
            }
        }

        if(number<0){
            factors.push("-");
        }

        if(number>9){
            System.out.println("This is impossible.");
        }else{
            System.out.println("Smallest Number:");
            while(!factors.empty()) System.out.print(factors.pop());
        }
    }
}