Java 如何在不转换为字符串的情况下完成/修复加法持久性算法?
正在尝试编写加法持久性算法。 AP是指当你有一个号码,你不断地添加它的数字,直到你剩下一个单数。例如,9991=9+9+9+1=28,2+8=10,1+0=1。因此,9991的加性持久性为3。加了3次才把这个数字减为一位数 我已经对问题进行了编码,但它不断增加计数器。看起来对我来说是正确的,但不能让它工作lolJava 如何在不转换为字符串的情况下完成/修复加法持久性算法?,java,string,algorithm,math,while-loop,Java,String,Algorithm,Math,While Loop,正在尝试编写加法持久性算法。 AP是指当你有一个号码,你不断地添加它的数字,直到你剩下一个单数。例如,9991=9+9+9+1=28,2+8=10,1+0=1。因此,9991的加性持久性为3。加了3次才把这个数字减为一位数 我已经对问题进行了编码,但它不断增加计数器。看起来对我来说是正确的,但不能让它工作lol Scanner reader = new Scanner(System.in); int ui; int b; int sum = 0; int
Scanner reader = new Scanner(System.in);
int ui;
int b;
int sum = 0;
int count = 0;
System.out.print("Enter a number: ");
ui = reader.nextInt();
do {
do {
b = ui % 10;
ui = ui / 10;
sum += b;
} while (ui != 0);
ui = sum;
count++;
//System.out.print(b);
//System.out.print(sum);
//System.out.print(ui);
} while (ui > 10);
System.out.print(count+1);
}
您需要在每次运行时重置总和,否则您将为其分配ui,直到溢出为止,它将超过10。以下是正确的版本:
do {
sum = 0;
do {
b = ui % 10;
ui = ui / 10;
sum += b;
} while (ui > 9);
sum += ui;
ui = sum;
count++;
} while (ui > 9);
System.out.print(count);
你是通过IDE中的调试器运行程序的吗?我真的不知道如何使用调试器。它显示我的IP有一些错误?但是谢谢你让我注意到调试器。我现在就学会用它了:我试过1654号,结果是3,而不是2。你能解释一下原因吗?这个程序似乎与我尝试过的各种其他数字一起工作。另外,它不适用于1*10^n和9993。对,您需要打印count,而不是count+1如果我这样做,那么9992就不起作用了。9992 > 9+9+9+2 = 29 > 2+9=11 > 1+1=2. 它需要3个步骤,但是程序输出2.Ach,我们忘记了另一件事:在内部循环之后的sum+=ui,你现在能试试吗?