アプリ版:「スタンプのみでお礼する」機能のリリースについて

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>

A 回答 (4件)

>#2


0は「正の整数」には含まないのでy = 0は考慮に入れなくていいんじゃないですか?
確かにヒントをベタに実行するとy > 2のときに危険ですが。

int i, ans; // ループカウンタと解
ans = x;
for(i = 0; i < y - 1; i ++) ans *= x;

となりますか。
    • good
    • 0

>2 2 4 6 8 16



本当ですか?
2 2 4 8 16 32
ではなくて、ですか?

>x*=xをy-1回繰り返せばOK

確かに、全然オッケーじゃないですねw
    • good
    • 0

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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!