• ベストアンサー

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>

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

>#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)
回答No.4

>2 2 4 6 8 16 本当ですか? 2 2 4 8 16 32 ではなくて、ですか? >x*=xをy-1回繰り返せばOK 確かに、全然オッケーじゃないですねw

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

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になってしまいます。

回答No.1

>「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重ループさせればいい)

関連するQ&A