シミュレーション実装関数pow(x,y),すなわち実装演算x^y(xのy次方)であり,ここでxとyはいずれも整数である.
734 ワード
基本思想は,乗算回数を減らし,計算結果を再利用することである.
例えば、x^4は、1つずつ乗算すると4回の乗算が必要です.このように分解すれば(x^2)*(x^2)は2回の乗算しか必要ありません.x^2の結果は再利用できるからです.対称的な分解指数yを作って、x^(y/2)の平方を求めたほうがいいです.
具体的なアルゴリズムは以下の通りである:1 yが偶数であれば、mypow(x,y/2)*mypow(x,y/2)を直接計算する.2 yが奇数の場合、y−1は偶数であり、第1のケースに戻る.
例えば、x^4は、1つずつ乗算すると4回の乗算が必要です.このように分解すれば(x^2)*(x^2)は2回の乗算しか必要ありません.x^2の結果は再利用できるからです.対称的な分解指数yを作って、x^(y/2)の平方を求めたほうがいいです.
具体的なアルゴリズムは以下の通りである:1 yが偶数であれば、mypow(x,y/2)*mypow(x,y/2)を直接計算する.2 yが奇数の場合、y−1は偶数であり、第1のケースに戻る.
//int mypow(int x, int y)
//{
// if (y == 0)
// return 1;
// if (y == 1)
// return x;
// else
// {
// return x*mypow(x, y - 1);
// }
//
//}
int mypow(int x, int y){
if (y == 0)
return 1;
if (y == 1)
return x;
int ret = 0;
int tmp = mypow(x, y / 2);
if (y & 1 != 0)
{
ret = x*tmp*tmp;
}
else
{
ret = tmp*tmp;
}
return ret;
}
int main()
{
printf("%d
", mypow(2, 4));
system("pause");
return 0;
}