Моя цель – вывести среднее значение входного числа и его разворот.
Когда я ввожу 974, результатом будет 726.0 вместо 726.5. Я давно думаю об этой проблеме, но я до сих пор не могу получить ответ.
Надеюсь, кто-нибудь может мне помочь. Большое спасибо!
#include int main(void) { int N, D1, D2, D3; double aver; scanf("%d", &N); D1 = N % 10; D2 = ((N - D1) / 10) % 10; D3 = (N - D1 - D2) / 100; aver = (D1*100 + D2*10 + D3 + N) / 2; printf("%lf", aver); return 0; }
В вашем коде N
, D1
, D2
, D3
все являются int
s, поэтому вычисление
(D1*100 + D2*10 + D3 + N) / 2;
выполняется как целочисленная арифметика, а затем результат повышается до double
. Таким образом, результатом является просто double
представление значения int
.
Чтобы обеспечить арифметику с плавающей запятой,
double
или float
. float
. Просто добавьте double
. Увидеть ниже:
#include int main(void) { int N, D1, D2, D3; double aver; scanf("%d", &N); D1 = N % 10; D2 = ((N - D1) / 10) % 10; D3 = (N - D1 - D2) / 100; aver = (double)(D1*100 + D2*10 + D3 + N) / 2; printf("%lf", aver); return 0; }
Оформить заказ Код запуска