累乗、階乗

色々覚えてきたところで、勉強がてら実装してみます。

まずは累乗の実装です。

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ということにしておきました。

まだまだ穴だらけの実装ですが、勉強の成果が少し出てきてます。

この調子で頑張っていきましょう。