在C ++中
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 :(得分:0)
在printf("%d", (int)sqrt(...))
中,强制转换整数会将数字截断为整数,因此2.9变为2 - %d打印出来。
但在printf("%0.lf", sqrt(...))
中,浮点数舍入为零十进制数,因此2.9写为3.
因此,如果答案不是整数,结果可能会有所不同。
答案 1 :(得分:-1)
这两件事
%d
表示十进制(带符号)整数 %lf
表示%.0lf
表示小数点后零位数的双精度数,因此它基本上与整数相同。但是,当转换为int
时,转换为%.0lf
时,在转换为{{1}}时直接丢弃小数点后的数字,它会四舍五入到最接近的整数。 所以预期的输出完全一样。我不知道为什么你会期待不同的输出。