我是一名java学习者,我有一个任务要在论坛上了解更多信息。 挑战是接收一个数字并乘以它自己的数字,如:
输入999
输出`9 * 9 * 9 = 729然后7 * 2 * 9 = 126再次1 * 2 * 6 = 12最后1 * 2 = 2直到它只击中一个数字。
我遇到了这个问题,我要求变量添加一个长度为2的数组的乘法它返回给我
1------------------1
49-----------------2
final result 2450
这就是代码..
class Persist {
public static void persistence(long n) {
String number = String.valueOf((int)n);
char[] digits1 = number.toCharArray();
int value = 1;
for(int i = 0 ;i <= digits1.length -1;i++) {
System.out.println(value + "-----------------" + digits1[i]);
value = value* (int)digits1[i];
}
System.out.println((int)value);
}
public static void main(String [] args) {
persistence(12);
}
}
我可以尝试解决这个问题,但是我很想知道什么是错的。谢谢大家提前帮助,只是路过。
答案 0 :(得分:1)
您使用的是数字的ASCII值(请参阅https://en.wikipedia.org/wiki/ASCII),即1 = 49和2 = 50
49 * 50 = 2450
您可以使用Character.getNumericValue来获取char的数值,即
class Persist {
public static void persistence(long n) {
String number = String.valueOf((int)n);
char[] digits1 = number.toCharArray();
int value = 1;
for(int i = 0 ;i <= digits1.length -1;i++) {
System.out.println(value + "-----------------" + digits1[i]);
value = value* Character.getNumericValue((int)digits1[i]);
}
System.out.println((int)value);
}
public static void main(String [] args) {
persistence(12);
}
答案 1 :(得分:0)
如果使用调试器查看值,最容易理解。在实际计算 | c1 | c2 | c3 | c4 | c5 | c6
r1 | Red | 53 | Blue | 45 | Yellow | 15
期间,您没有使用数字的值,而是使用字符的ASCII值。这是1-> 49和2-> 50,因此您计算49 * 50 = 2450。
将行更改为value = value * (int)digits1[i]
,即可获得所需内容。
答案 2 :(得分:0)
这是我怎么做的。我调整它以便将0值数字转换为1.您可以将其注释掉(这是因为0的任何数字将答案变为0)。此版本将继续重新倍增,直到它降至一位数。
public class Persist {
public static void main(String [] args) {
int answer = persistence(234);
System.out.println(" length: " + String.valueOf(answer).length());
while ( String.valueOf(answer).length() > 1) {
answer = persistence(answer);
} }
static int persistence(int n) {
int value = 1;
String myStr = String.valueOf(n);
int myStrLen = myStr.length();
int[] finalIntAr = new int[myStrLen];
for (int v=0; v< myStrLen; v++) {
String subS= myStr.substring(v,v+1);
System.out.println("the char/int : " + subS);
Integer bigI = Integer.valueOf(subS);
if (bigI == 0) { bigI = 1; } // take this out if you want 0 to perform as 0
finalIntAr[v] = bigI.intValue();
}
for (int i = 0 ; i < myStrLen; i++) {
System.out.println(" ----- first= " + value + " multiplied by : " + finalIntAr[i]);
value = value * finalIntAr[i];
}
System.out.println("\n CURRENT FINAL VALUE *** : " + value);
return value;
} }
输出:
the char/int : 2
the char/int : 3
the char/int : 4
----- first= 1 multiplied by : 2
----- first= 2 multiplied by : 3
----- first= 6 multiplied by : 4
CURRENT FINAL VALUE *** : 24
length: 2
the char/int : 2
the char/int : 4
----- first= 1 multiplied by : 2
----- first= 2 multiplied by : 4
CURRENT FINAL VALUE *** : 8
答案 3 :(得分:0)
由于没有人发布没有字符串或字符的答案,我会的。但技术上并不是你问题的答案。
public static void persistence(long x)
{
long answer = 1;
while (x != 0) {
long onesDigit = x % 10;
answer *= onesDigit;
x /= 10;
}
System.out.println(answer);
}