ceilは使わずに整数型aの+20%した値を小数点以下切上げで求めるにはどうしたらよいでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
整数n
の20%、つまりn / 5
の切り上げは(n + 4) / 5
(全てint型で計算)で求まります。
#include <assert.h> #include <stdio.h> int ceil20up(int n) { assert(0 <= n); int r = (n + 4) / 5; // ceil(n * 20%) return n + r; } int main() { for (int i = 1; i <= 100; i++) printf("%d -> %.1f -> %d\n", i, i * 1.2, ceil20up(i)); }
投稿2017/09/05 02:28
編集2017/09/05 02:35総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
(最初の回答は四捨五入と勘違いしていたため、回答内容を書き換えました)
ありがとうございます。説明が足りませんでしたが、20%は固定ではなく、可変(x%)だった場合どうなりますでしょうか?
x%が整数値なら (n * x + 99) / 100 になります。
整数分母 D で割るとき、整数分子 N に (D - 1) を足しておけば整数型のceil演算になります。
注意:値nが小さいうちは気にする必要がありませんが、部分式 n * x がint型で表現可能な値よりも大きくなる(オーバーフロー)可能性に注意してください。
この式で期待通りの結果が得られました。ありがとうございました。m(_'_)m

0
120掛けて100で割るのはどうでしょうか。
c
1#include<stdio.h> 2void main(){ 3 int c=563; 4 int p=20; 5 c = (c * (100 + p) + 99) / 100; 6 printf("c :%d\n",c); 7}
投稿2017/09/05 02:39
編集2017/09/05 02:48総合スコア4070
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。