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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
ロボットの住む世界で流行ってる罰ゲームとは?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
1~100までの数字を表示し、かつその中から2の倍数を表示する
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
排他的論理和 BCC(水平パリテ...
-
Visual C++でdebugとreleaseで...
-
VBAの再計算が反映されない件に...
-
切捨て関数を使わずに小数第2...
-
モジュロ
-
VB6で正確なミリ秒を計測したい...
-
Javaでのある数の小数点乗に...
-
for文である数の倍数になるまで...
-
計算式の文字列を解析して自分...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
C++ でファイルを消す関数(??)
-
NW7のチェックディジットについて
-
Excel VBAの残業時間の合計計算...
-
時間計算について
-
チェックデジット計算できる関...
-
順列のプログラムについて(VB)
-
[急募]Pythonについてです。
-
VBA入力フォームで労働時間の計...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
Visual C++でdebugとreleaseで...
-
モジュラス103の計算とは何でし...
-
ExcelのマクロVBA動作を軽くす...
-
VBAで関数をつくる
-
CとFORTRANの計算速度はどちら...
-
VBAでの勤務時間計算
-
PHPとJavaでSHA256の結果を同じ...
-
傾いた四角形内の範囲の条件式
-
エクセルで特定のセルのみを任...
-
モジュロ
-
VBでReplace
-
継承元と継承先での変数
-
計算量の少ないn乗根の求め方
-
CRC8を教えてください
おすすめ情報