2017-08-24 858 views
1

在C++int(%d)和%.0lf有什么不同?

int a, b, c; 
double k; 

scanf("%d %d %d", &a, &b, &c); 
k = (double)a*a/(b*b + c*c); 
printf("%.0lf %0.lf %d", sqrt(b*b*k), sqrt(c*c*k), (int)sqrt(c*c*k); 

例如, 输入:52 9 16 输出:25 45 45

但是,我认为那些是不同的。其实,在网上裁判中判断不一样。

有什么不同?

printf("%.0lf %0.lf %d", sqrt(b*b*k), sqrt(c*c*k), (int)sqrt(c*c*k); 

在上面的句子里,L,而不是1

它是根据不同的编译器?

+0

这取决于编译器并没有不同。这应该是什么:'%.0lf' – tilz0R

+0

但是,在线Judge中,当我编写%.0lf, 时,我得到了“错误”,但是当我使用(int)sqrt写入%d时,我得到了“正确” (bla); – StackQ

+3

我再次问你,用'%.0lf'指望什么?'0'是什么? – tilz0R

回答

-1

这两件事

  • %d十进制(签名)整数
  • %lf长浮现在称为精度浮点数和
    • %.0lf装置一个双数与零数字在小数点后面所以它基本上和一个整数相同。不过,有一个小小的差异,当转换为int时,小数点后的数字会直接丢弃,而转换为%.0lf时,会舍入为最接近的整数。

所以预期输出是完全一样的。我不知道你为什么期待不同的输出。

+1

它是C/C++,当传递给'printf()'时,float不会被自动强制为一个整数。浮点和整数具有不同的位表示。你的回答是不正确的 –

+0

@NiklasR但是PRINTF会在decm点之后去掉所有的东西! – iBug

+0

我认为Niklas指出你需要将'int'传递给'%d'格式,而不是'double'。 OP的代码实际上是在执行该操作,所以输出应该是相同的。 – Useless

0

printf("%d", (int)sqrt(...))转换为整数将数字截断为整数,因此2.9变为2 - 并且%d打印该数字。

printf("%0.lf", sqrt(...))浮点数四舍五入为零十进制数字,所以2.9如果答案是不是整数的结果可能会有所不同写成3

这样。

+0

double db; \t db = 19/10; printf(“%d%.0lf%0.lf”,int(db),db,db); 但是,结果是1 1 1 – StackQ

+0

尝试db = 19.0/10.0; –

相关问题