[TIL]20210623


C言語


一人でシャベルで悟ったものを掘っている。


次の内容はかなり雑然としている.結論を見よう
.
.
1085番のコードを解くと、正の値しか入っていないのに負の値が出る場合があります.
#include <stdio.h>

int main(void) {
int h, b, c, s;
scanf("%d %d %d %d", &h, &b, &c, &s);

printf("%.1f MB",(float)(h*b*c*s)/(8*1024*1024) );
}
に48000325300と入力すると、-23.73 MBが表示されます.
#include <stdio.h>

int main(void) {
long long int h, b, c, s;
scanf("%lld %lld %lld %lld", &h, &b, &c, &s);

printf("%.1lld MB",(long long int)(h*b*c*s)/(8*1024*1024) );
}
値が大きすぎるため、出力側ではlldが使用され、4410016210入力時に1 MBが生成される.
彼は一瞬の大金しか考えていないので、間違いだとは思わなかった.
どう答えたらいいか分からないので、質問ラベルに私のような間違った質問の答えがあるのを参考にしました.
#include <stdio.h>

int main(void) {
long long int h, b, c, s;
scanf("%lld %lld %lld %lld", &h, &b, &c, &s);

printf("%.1f MB",(float)(h*b*c*s)/(8*1024*1024) );

}
intの代わりにlong intで値を受け入れ、printf端で(float)を使えば問題を解決できます.
要するにprintf("%.1f MB",(float)(h*b*c*s)/(8*1024*1024) );活動場所を表す
構造的には、(float)(h*b*c*s)/(8*1024*1024)の値は、(h*b*c*s)によって実数を算出した後、(float)で割って実数を保持する.(8*1024*1024)のように、後の2つを先に計算すると、計算された値のみが浮動小数点形式に変換されます.

アルゴリズムで最小公倍数を実現する。


アルゴリズムで2 3 4の最小公倍数を実現したらどうなりますか?

0(署名)と1(署名しない)で2日ごとに署名し、3、4日ごとに署名する場合を説明すると、上図のようになります.12日には出席します.
while(day % a!= 0 || day % b != 0 || day %c != 0) day++;
コードが文を繰り返すたびに1日増加するように構成されている場合は、残りの値がゼロに下がることが条件です.(float)((h*b*c*s)/(8*1024*1024))の間では、1つのwhile文だけが実行されても、すべての文が0の場合にのみ終了します.