累乗、階乗
色々覚えてきたところで、勉強がてら実装してみます。
まずは累乗の実装です。
float power(float num,int pow){ int tmp = num; if ( pow == 0 ) { return 1; } if ( pow > 0 ) { while(--pow){ num *= tmp; } } else { num /= tmp; while(pow++){ num /= tmp; } } return num; } int main () { int num,pow; scanf("%d",&num); scanf("%d",&pow); printf("%f\n",power(num,pow)); return 0; }
$ main 10 10 10000000000.000000 $ main 10 0 1.000000 $ main 10 -1 0.100000
うまくいってるっぽいです。
次は階乗の実装です。
unsigned int factorial (int num) { int tmp = num; if ( num <= 0 ) { return 1; } --tmp; while(tmp) { num *= tmp--; } return num; } int main () { int num,pow; scanf("%d",&num); printf("%d\n",factorial(num)); return 0; }
$ main 4 24 $ main 7 5040 $ main 10 3628800
マイナス値の扱いをどうすればいいのかわからなかったのでとりあえず1ということにしておきました。
まだまだ穴だらけの実装ですが、勉強の成果が少し出てきてます。
この調子で頑張っていきましょう。