
X^8の計算を、掛け算を使わずに、足し算と引き算を使って計算するプログラムを作成するというものです。
足し算のみを使ってべき乗の計算をするプログラムは以下のソースコードの様にできたのですが、足し算と引き算の両方ともを使って計算するプログラムがわかりません。
べき乗の計算をどのように考えれば、足し算と引き算の両方を使って計算できるのか教えてください。
以下、足し算のみを使って計算するプログラムのソースコードです。
・・・ソースコード・・・
#include<stdio.h>
int main(void) {
int i, j, k;
i = 0; ///①Xの加算回数の値を保持する変数iを0に初期化する。///
j = 0; ///②X^2の加算回数の値を保持する変数jを0に初期化する。///
k = 0; ///③X^4の加算回数の値を保持する変数kを0に初期化する。///
double X, goukei1, goukei2, goukei3;
X = 0;
goukei1 = 0; ///④X^2の計算値を保持する変数goukei1を0に初期化する。///
goukei2 = 0; ///⑤X^4の計算値を保持する変数goukei2を0に初期化する。///
goukei3 = 0; ///⑥X^8の計算値を保持する変数goukei3を0に初期化する。///
printf("X=");
///数値Xを入力///
scanf_s("%lf", &X);
///⑦iがX以下か判定し、真ならば⑧~⑨を繰り返し、偽ならば繰り返しを終了する。///
for (i = 0; i < X; i++) { ///⑨iに1を加算する。///
goukei1 += X; ///⑧goukei1にXを加算する。///
}
///⑩jがgoukei1以下か判定し、真ならば⑪~⑫を繰り返し、偽ならば繰り返しを終了する。///
for (j = 0; j < goukei1; j++) { ///⑫jに1を加算する。///
goukei2 += goukei1; ///⑪goukei2にgoukei1を加算する。///
}
///⑬kがgoukei2以下か判定し、真ならば⑭~⑮を繰り返し、偽ならば繰り返しを終了する。///
for (k = 0; k < goukei2; k++) { ///⑮kに1を加算する。///
goukei3 += goukei2; ///⑭goukei3にgoukei2を加算する。///
}
///最終的な計算結果を出力///
printf("X^8=%f", goukei3);
return 0;
}
No.1ベストアンサー
- 回答日時:
「引き算を使え」という問題の意図がよくわかりませんが、単純にfor文のカウンタ(質問文ではi, j, k)を加算ではなく減算でカウントするっていう意味だったりしないでしょうか。
ところで、X^8 = ((X^2)^2)^2 というアイデアは数学的には賢いやり方ですが、
足し算縛りのプログラムで作ると実は計算量は大きくなると思います。
X^8 = ((((((X*X)*X)*X)*X)*X)*X)*X の方が、実は計算回数が少なくて済みます。
X=10の場合、前者は10,110回、後者は70回の足し算になります。
遅くなりました^^;
問題文のとらえ方に少し間違いがあったようで、掛け算も使ってよかったようでした。
それから今一度よくよく考えてみたところ、X^2=(X+1)*(X-1)+1と変形でき、同様にX^4=(X^2+1)*(X^2-1)+1、X^8=(X^4+1)*(X^4-1)+1となって、for文もいらないシンプルなソースコードでプログラムを作成することができました。
丁寧に回答してくださったのに、申し訳ありませんでした。。
それでも、そのような考え方もあるんだなと勉強になりました。以後参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
C言語初心者。静磁場の計算。台...
-
VBAの再計算が反映されない件に...
-
DLL(VC++で作った)で稼動中の...
-
引き放し法による除算アルゴリ...
-
移動平均を計算するプログラム
-
モジュラス103の計算とは何でし...
-
Matlabでのニュートン法について
-
人生、宇宙、すべての答えとは...
-
窓関数について質問です。
-
VBAで関数をつくる
-
小数点以下を切り捨てたい
-
エクセルで特定のセルのみを任...
-
再帰呼び出しを用いるnPk,nCk ...
-
数値計算の高速化 (cos, sin, exp)
-
サインカーブを計算したい
-
VB6で 1-0.1*10 の計算結果が...
-
なぜオーバーフローになるので...
-
Visual C++でdebugとreleaseで...
-
MATLABの計算精度
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
VBAで関数をつくる
-
[急募]Pythonについてです。
-
数値計算の高速化 (cos, sin, exp)
-
C言語についての質問です。 ル...
-
切り上げたい
-
DLL(VC++で作った)で稼動中の...
-
CとFORTRANの計算速度はどちら...
-
趣味で「乗換案内」みたいなソ...
-
CGIの実行権限(ディスク容...
-
エクセルで特定のセルのみを任...
-
functionを含んだプログラムを...
-
時間差を求める
おすすめ情報