![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.5
- 回答日時:
#4 ulisrt 様
> calcStepTo8(8)は9になってしまいますよ?
……あ゛。
えーと、恥ずかしい間違いをしちゃいました。
一文で表すなら
(9 - src % 8) % 8
になるのですが、たった 1 / 8 の場合のために 8 の剰余を使うのはもったいないというかなんというか。
if 文で切り分けて
if (src % 8 == 0){
return 1;
} else {
return 9 - src % 8;
}
とするか、あるいは条件演算子を使って
return (src % 8 == 0) ? 1 : (9 - src % 8);
とするかですかね。
同じ計算を 2 回しているので、それは何らかの変数に格納するという手もあります。
あとは C/C++ 限定の方法として
int rem;
return (rem = src % 8) ? 9 - rem : 1
という手もありますが、……まあ、他人がこんなコード出して来たらそいつを殴りますなw
No.4
- 回答日時:
例えば「ある数」が8のとき、
1. 判定値 ← ある数、結果 ← 1
2. 判定値が 8 で割り切れるか? Yes なら 5. へ、No なら 3. へ
3. 判定値 ← 判定値 + 1、結果 ← 結果 +1
4. 2. へ
5. 結果が求める値である。
上の「結果」は1となり正しい解だと思いますが、
calcStepTo8(8)は9になってしまいますよ?
No.2
- 回答日時:
……っと、まあ最初の回答だけではただ単にふざけているだけと思われそうなので、真面目な説明を。
はっきり言って今回の問題は for 文の一番目に書いたとおり一回の簡単な計算だけで答えが出せます。
それに対してループを使う場合は今回の場合毎回剰余計算が走ることになります。
つまり計算を行わなくてはならない回数が計算だけで出す場合に比べて多くなり、その分時間がかかってしまいます。
したがって、今回のようなわざわざループを回さなくても簡単な計算で値を求められる場合は後者の方が一般に優れています。
それでもなんかの宿題等でどうしてもループを使わなくてはならないならば、求める値は以下のアルゴリズムで出せます。
1. 判定値 ← ある数、結果 ← 1
2. 判定値が 8 で割り切れるか? Yes なら 5. へ、No なら 3. へ
3. 判定値 ← 判定値 + 1、結果 ← 結果 +1
4. 2. へ
5. 結果が求める値である。
あとは上記をあなたがコーディングしたい言語の for の仕様に合わせて書くだけです。
たしかに、単に8で割り切れる数を調べるなら、for文使う必要ないですね。
ループを回すと、余計な処理が増えるという件、了解です。
8で割り切れる数になるまで ループを回せばいいという説明でヒントを得て、最終的にPHPですが、以下のような関数になりました。
<?php
function tillEight($x){
$y = 0;
for (; $y <= 8 - ($x % 8); $y++) {
}
return $y;
}
もっといい書き方あるかもわからないですけど、一応これでできました。
詳しいご説明ありがとうございました。
No.1
- 回答日時:
C でよければ以下のコードを参考にどうぞ。
int calcStepTo8(int src) {
int result;
for (result = 9 - src % 8; 0;);
return result;
}
……何か問題でも? ちゃんと for を使っているでしょ?
for文使わなくても、phpだと
<?php
function tillEight($x){
return 9 - ($x % 8);
}
で終わるということですね。
大変参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# c言語 1 2022/11/09 13:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- C言語・C++・C# 変数のスコープ 5 2023/05/27 17:50
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
モジュラス103の計算とは何でし...
-
VBAで関数をつくる
-
変化させるセルが変化しない
-
傾いた四角形内の範囲の条件式
-
PHPで四則演算以外の微分、積分...
-
排他的論理和 BCC(水平パリテ...
-
FORTRANをご存じの方がいらっし...
-
バッチファイルでウインドウを...
-
文章中の数値を自動で足すサー...
-
「評価」「評価値」という言葉...
-
matlab計算での進捗状況を知りたい
-
骨折リスク評価のFRAXについて...
-
ExcelのマクロVBA動作を軽くす...
-
平均時間計算量と最大時間計算...
-
MT4 固まる
-
エクセルで特定のセルのみを任...
-
ExcelのVBAで複素数は扱えない...
-
表計算上の式がVBA実行中に、メ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
mod でうまく
-
めちゃきれい
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
60進数の四則計算
-
プログラムの質問
-
VBでReplace
-
数値計算の高速化 (cos, sin, exp)
-
C言語についてです。 再帰を使...
-
Javaを使った行列計算
-
C言語のプログラミングの問題で...
-
エクセルで特定のセルのみを任...
-
matlab計算での進捗状況を知りたい
-
CとFORTRANの計算速度はどちら...
-
matlabで計算終了
おすすめ情報