我正在尝试CodeWars上的一个程序,其中一个要求是persistent()函数返回一个int。我无法以一种总是返回int的方式形成它。非常感谢任何帮助!
public class Persist
{
public static int persistence(int n)
{
int product = n;
int numReiterations = 0;
while (length(product) != 1)
{
product = multiplyDigits(product);
numReiterations++;
}
if (length(product) == 1)
return numReiterations;
}
public static int multiplyDigits(int num)
{
int product = 1;
for (int x=0; x<String.valueOf(num).length(); x++)
{
char numChar = String.valueOf(num).charAt(x);
int numBack = Integer.parseInt(String.valueOf(numChar));
product *= numBack;
}
return product;
}
public static int length(int product)
{
return String.valueOf(product).length();
}
}
答案 0 :(得分:4)
我根本不会使用字符串算术。此外,您不需要再次检查号码的长度,因为您知道它必须是 System.setProperty("file.encoding", "ASCII");
System.out.println(Charset.defaultCharset());
,您刚刚摆脱了while循环。
如果使用字符串处理,它不仅更长,而且速度更慢。我还会使用1
而不是long
,因为这样可以节省更多的费用。
int
打印
public static int persistence(long n) {
int numReiterations = 0;
for (long product = n; !isSingleDigit(product); product = multiplyDigits(product))
numReiterations++;
return numReiterations;
}
public static long multiplyDigits(long num) {
long product = 1;
for (; num > 0; num /= 10)
product *= num % 10;
return product;
}
public static boolean isSingleDigit(long n) {
return n <= 9;
}
public static void main(String[] args) {
System.out.println(persistence(99999999999999999L));
}
答案 1 :(得分:0)
如果该函数应返回某些内容,则必须始终至少有一个返回语句在之外的任何if / else块。
不只是在Java中,而是任何类似的强类型语言。
在if(length(product==1)) block
,return -99999999
或某些错误代码之后,如果在正常操作期间不应该返回。
答案 2 :(得分:0)
while
循环仅在length(product)
等于1时终止。因此,只需删除numIterations
条件即可返回if
。