面接でこの質問に答えました。この質問の解決方法がわかりません。解決方法を教えてください。
「与えられた浮動小数点値を切り捨てるプログラム (例: 16.25=16)。float 値を整数に代入してから int 値を float にコピーするべきではありません…別のロジックを適用してください。」
数値が正の場合:
#include <math.h>
printf("%f\n", floor(16.85));
または正と負の数の場合:
printf("%f\n", trunc(16.85));
これがうまくいくかどうか見てください。
#include<stdio.h>
int main()
{
float num=16.25;
int x;
char str[10];
sprintf(str,"%f",num);
sscanf(str,"%d",&x);
printf("The number now is %d",x);
}
「文字列に変換」タイプの回答をすべて破棄し、純粋に数学演算に集中する場合は、次の非常に非効率的なプロセスを試すことができます。
float Truncate(float n) {
float r = 0.0
if(n > 0.0) {
while(n > 0.0) {
n -= 1.0;
r += 1.0;
}
} else {
while(n < 0.0) {
n += 1.0;
r -= 1.0;
}
}
return r;
}
より大きな値の N を完成させるには 100 年かかるかもしれませんが、それは単なるエンジニアリングです。アルゴリズムは健全です。実際には、おそらく同様のことを行うことができますが、減算ではなく除算を使用すると、大幅に高速化されます。