提问人:HavaDev 提问时间:9/24/2023 最后编辑:Theodor ZouliasHavaDev 更新时间:9/24/2023 访问量:51
执行超时(12000 ms):如何优化此代码
Execution Timed Out (12000 ms): How can I optimize this code
问:
我在代码战中的任务是返回 true 或 false,具体取决于输入数字是否为自恋数字(例如 153 = 1^3 + 5^3 + 3^3)。但是当我测试我的代码时,它说执行超时(12000 毫秒),我应该进一步优化代码。
有谁知道我该如何优化下面的代码?下面的代码是用 C# 编写的。
public class Kata
{
public static bool Narcissistic(int value)
{
int digit = 0;
int tempValue=value;
int checkValue=value;
int num;
double sum = 0;
//number of digits
while(value!=0){
value = value%10;
digit++;
value=value/10;
}
//sum
while(tempValue!=0){
num=tempValue%10;
sum=sum+pow(num,digit);
num=num/10;
}
if(sum==checkValue){
return true;
}else
return false;
}
//power
private static int pow(int a,int b){
int temp = a;
for(int i=1;i<b;i++){
a=a*temp;
}
return a;
}
}
答:
1赞
groophy lifefor
9/24/2023
#1
在你的代码中是条件循环,但你从不改变这个值,所以它是一个无限循环,与性能无关tempValue
也许你可以替换
while(tempValue!=0) {
num=tempValue%10;
sum=sum+pow(num,digit);
num=num/10;
}
自
tempValue = -1;
while (tempValue != 0)
{
int num = tempValue % 10;
sum += Math.Pow(num, digit);
tempValue /= 10;
}
测试用例
Kata.Narcissistic(153);
// true
// DEBUG / NET6 [If you have care about performance]
// Time elapsed (ms): 6,998
// Time elapsed (ns): 7046900
评论
1赞
groophy lifefor
9/24/2023
我可能在某些地方做了一些小的更改,我提供了完整的代码,以便您可以将其与我的进行比较。请参见:onlinegdb.com/v00Wof6kF
0赞
Luuk
9/24/2023
好吧,我不打算比较它,因为我(现在)没有足够的时间来理解(这个问题)的问题......😉
上一个:如何组合动态类型的表达式
评论
while
if
return sum == check;
Pow
pow
Power
tempValue
永远不会是 0。