通过重复整数除法模拟对数

时间:2014-09-13 15:53:03

标签: java math division logarithm

我正在尝试编写一个通过重复整数除法来模拟对数的程序。用户输入他们想要记录的基数和值X.代码运行循环并在每次连续分割后递增计数。在X的值小于基数之后,代码被设置为停止,因为我只使用int类型变量。

此代码适用于某些数字和基础,但对于其他数据,它会提供错误的值。它确实“log_2(64)是6”但是它没有做100的log_10。它给出了10的计数。

public static void main(String[] args) {

    Scanner inScan = new Scanner(System.in);

    int base;
    int X;
    int response;
    int n=0;

  do{   
    System.out.println("Java Lab 3 Logarithm Solver.");
    System.out.println("Please enter a base > 1");
    base = inScan.nextInt();
    System.out.println("Please enter a number, X>0.");
    X = inScan.nextInt();
    if (X > 0 && base > 1){
        System.out.println("Logarithm base " +base+ " of " +X+" is ");
         for ( ; X>base ;n++){

            X=(X/base);
        }
        System.out.println(n);
    } else {
        System.out.println("Invalide numbers.");
    } 
        System.out.println("Would you like to go again? Press 1, press 0 to quit");
        response = inScan.nextInt(); 

  } while (response == 1);

 }
}

1 个答案:

答案 0 :(得分:1)

您将n声明为全局变量;我怀疑如果你检查你的测试,这个算法只在你每次编译和运行它时第一次工作。而不是将n作为全局,在你的for循环中声明它像

for(int n = 0; X < base; n++)

因为看起来你以后需要n的值,我建议你有一个范围更宽的变量,可能在do-while循环中声明,以存储n,比如

do
{ 
    int numberOfTimesThroughLoop = 0;
    ...
    for(...)
    {
        x = x/base;
        numberOfTimesThroughLoop = n;
    }
}

作为附注,大多数时间变量(甚至单个字母变量,如你的&#39; X&#39;)都是小写字符