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

标签 java math division logarithm

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

此代码对于某些数字和基数工作正常,但对于其他数字和基数,它给出了错误的值。它执行“log_2(64) is 6 ”,但不执行 log_10 of 100。它给出的计数为 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);

 }
}

最佳答案

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

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

因为看起来您稍后需要 n 的值,所以我建议使用一个范围更广的变量(可能在 do-while 循环中声明)来存储 n,例如

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

作为旁注,大多数情况下变量(甚至是单字母变量,例如“X”)都带有小写字符

关于java - 通过重复整数除法模拟对数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25824935/

相关文章:

python - 在 C 中除以大(多)数(得到一个零,当我知道它不为零时)

java - 单元测试的捕获与抛出异常

java - jboss 使用选项 -b 0.0.0.0 运行脚本

java - 将输入从一个 JTextArea 传递到另一个 JTextArea 时遇到问题

c# - 将数字字符串转换为四舍五入的小数 (C#)

Python Pandas : Convert timedelta Value From Subtracting Two Dates Into Integer Datatype (AttributeError)

java - 为什么可比实现有效

algorithm - Interviewstreet-排列游戏

c - 在 c 中生成阿姆斯特朗数到第 n 个数不起作用

c - 仅对数组中的偶数求和