本周題目難度級(jí)別"Medium"拓劝,使用語(yǔ)言C
題目:本周題目又是造輪子考赛,求x的n次方一罩,即pow(x,n).
思路:這題還要思路?就是一數(shù)學(xué)題灯蝴,直接上代碼:
double myPow(double x, int n) {
//剪枝恢口,提高效率
if (x == 1.0 || x == 0.0) return x;
if (x == -1.0 && ((n % 2) == 0)) return -x;
if (x == -1.0 && ((n % 2) != 0)) return x;
//處理n為負(fù)數(shù)
if (n < 0) {
x = 1/x;
n = -n;
}
//剪枝,如果是小數(shù)穷躁,超過(guò)999999次方的都是0
if (x < 1 && x > 0) {
if (n - 999999 >= 0) {
return 0;
}
}
double result = 1;
//for循環(huán)求解
for (int i = 0; i < n; i++) {
result *= x;
//剪枝耕肩,小于0.00001就不用繼續(xù)循環(huán)了。
if (result < 0.00001 && result >0) {
result = 0;
break;
}
}
return result;
}
上面的代碼是我自己寫的问潭,效率一般猿诸,然后讓大家看看效率高的,如下代碼(此代碼不是我寫的狡忙,是目前效率最高的梳虽,沒(méi)有署名所以只能感謝不知名的作者了,因?yàn)椴皇俏覍懙脑肿拢揖筒蛔⑨屃舜芫酰址ǖ寄芸炊?/p>
double fastpow(double x, int n) {
if (n == 0)
return 1;
if (n == 1)
return x;
double t = fastpow(x, n / 2);
if (n % 2)
return t * t * x;
return t * t;
}
double myPow(double x, int n) {
if (n < 0)
return 1 / fastpow(x, -n);
return fastpow(x, n);
}
這周題目都寫完了,上周的題還沒(méi)做出來(lái)/(ㄒoㄒ)/~~北专。禀挫。。