- ベストアンサー
xのy乗を求める問題で…(ただし、xもyも正の整数値)
xもyも正の整数値を示し、xのy乗の値を算出する問題なのですが、やり方がよくわかりません(;_;) 解法はpowを使うやり方と、for文の多重ループを使ってやるやり方があり、どちらのやり方も試しなさい、、、ということです(;_;) 特によくわからないのがfor文を使ったやり方で、ヒントは 「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」 ということですが、いまいち理解できませんでした。 完成した表は 1 2 3 4 5 1 1 1 1 1 1 2 2 4 6 8 16 3 3 9 27 81 243 4 4 16 64 256 1024 5 5 25 125 625 3125 といった感じになるそうです。 どなたか教えてください<m(__)m>
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>#2 0は「正の整数」には含まないのでy = 0は考慮に入れなくていいんじゃないですか? 確かにヒントをベタに実行するとy > 2のときに危険ですが。 int i, ans; // ループカウンタと解 ans = x; for(i = 0; i < y - 1; i ++) ans *= x; となりますか。
その他の回答 (3)
- asuncion
- ベストアンサー率33% (2127/6289)
>2 2 4 6 8 16 本当ですか? 2 2 4 8 16 32 ではなくて、ですか? >x*=xをy-1回繰り返せばOK 確かに、全然オッケーじゃないですねw
- nda23
- ベストアンサー率54% (777/1415)
int answer = 1;//0乗の場合の答え for ( int i = 1 ; i <= y ; i++ ) { //iが1からyになるまでループ answer *= x; 答えにxの値を乗算する } >「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」 ちょっと、違和感がありますね。先ず、0乗が考慮されていません。 どんな値(0も含む)でも0乗は1です。また、y>2の場合は答えが 正しくありません。 もし、x = 2、y = 3 なら答えは8のはずですが、「~」の方法では 16になってしまいます。
- bluecampus
- ベストアンサー率66% (138/209)
>「xの1乗はxです、計算が必要なのは2乗以上の場合。なのでx*=xをy-1回繰り返せばOK」 // ※全角空白を使っているので要変換 #include <stdio.h> int main(void) { int x, y; int kai = 1; int i; printf("x="); scanf("%d", &x); printf("y="); scanf("%d", &y); for (i = 0; i <= y - 1; i++) { kai *= x; } printf("%dの%d乗は%d\n", x, y, kai); return 0; } 表にするのはこれを利用すればいいです。 (x,yを1から5まで2重ループさせればいい)