-3

面接でこの質問に答えました。この質問の解決方法がわかりません。解決方法を教えてください。

「与えられた浮動小数点値を切り捨てるプログラム (例: 16.25=16)。float 値を整数に代入してから int 値を float にコピーするべきではありません…別のロジックを適用してください。」

4

3 に答える 3

3

数値が正の場合:

#include <math.h>
printf("%f\n", floor(16.85));

または正と負の数の場合:

printf("%f\n", trunc(16.85));
于 2013-04-30T19:17:00.777 に答える
3

これがうまくいくかどうか見てください。

#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);
}
于 2013-04-30T19:28:53.360 に答える
2

「文字列に変換」タイプの回答をすべて破棄し、純粋に数学演算に集中する場合は、次の非常に非効率的なプロセスを試すことができます。

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 年かかるかもしれませんが、それは単なるエンジニアリングです。アルゴリズムは健全です。実際には、おそらく同様のことを行うことができますが、減算ではなく除算を使用すると、大幅に高速化されます。

于 2013-04-30T19:29:29.900 に答える