我正在尝试编写一个方法来判断一个整数是否好奇(等于其数字的阶乘之和)。
我写了一个阶乘方法。
public int factorial(int n)
{
if (n==0) return 1;
else return n*factorial(n-1);
}
然后另一个方法,如果数字好奇,则返回true。
public boolean isCurious(int y)
{
String converted = String.valueOf(y);
int sum = 0; //sum of factorials
for(int i=0; i<converted.length(); i++)
{
sum = sum + factorial(converted.charAt(i));
}
if (sum==y) return true;
else return false;
}
但它不起作用。 factorial(converted.charAt(i))很可能这部分是错误的。有什么问题?
答案 0 :(得分:3)
问题是因为数字的char
表示与该数字的整数值不同。这是该角色的https://oracle-base.com/articles/12c/multitenant-connecting-to-cdb-and-pdb-12cr1编码。如果您想将char
转换为int
值,则应从中减去'0'
(char
零)。
所以你的代码应该改为:
sum = sum + factorial(converted.charAt(i) - '0');
答案 1 :(得分:0)
您在 isCurious函数中使用了int作为参数。您应该使用 string 作为参数。在您下面传递的 factorial(converted.charAt(i))已更改 到 factorial(converted.charAt(i) - '0')来表示该字符就像一个int值。
代码段如下:
> public boolean isCurious(String y) {
> String converted = String.valueOf(y);
> int sum = 0; //sum of factorials
> for(int i=0; i<converted.length(); i++)
> {
> sum = sum + factorial(converted.charAt(i) - '0');
>
> }
>
> int temp = Integer.parseInt(y);
> if (sum==temp) return true;
> else return false;
}
从主要功能中调用此方法,如下所示:
是System.out.print(isCurious( “1”)); //在参数
中传递字符串
factorial(converted.charAt(i) - '0'); 。您可以在ASCII的帮助下理解这一行。
假设 converted.charAt(i)的值'1'在ASCII中等于 49 ,所以如果我们减去 '0'从此等于 48 ,然后 converted.charAt(i) - '0'等于 1 即 49 - 48 。这就是我们从转换后的字符中减去'0'的原因。