ПОМОЩЬ КОДУ при округлении и получении правильного ввода

0

Вопрос:

Ваша задача:

Напишите функцию, которая выводит на стандартный вывод (stdout) количество пользователей, которые не покидали сайт через 10 секунд (т.е. Число пользователей, которые не отскакивали).

Пожалуйста, округлите результат вниз до ближайшего целого числа (например, как 7.1 и 7.9 округлены до 7).

Обратите внимание, что ваша функция получит следующие аргументы:

n который является целым числом, представляющим число посетителей

b который представляет собой целое число, представляющее показатель отказов (т.е. процент пользователей, покинувших сайт за первые 10 секунд)

Мой код компилируется просто отлично, и я уверен, что моя логика верна, но мой результат неправильный, и я не знаю почему. Когда n = 1000 и b = 25 тогда мой результат должен быть 750. Я продолжаю получать 1000. Где я иду не так?

Я также не совсем уверен, как "закруглить" то, что они хотят от меня. Может ли это быть причиной, по которой я не получаю правильный результат?

МОЙ КОД:

void compute_active_users(int n, int b) {

    int BounceConvert = (b / 100); //converts the value of b to a decimal
    int BounceRate = (n * BounceConvert); // multiplys n times the b decimal
    int TotalVisitors = (n - BounceRate); // subtract BounceRate  

    printf("%d", TotalVisitors); // print out the final result

}
  • 1
    Проблемы целочисленного деления, возможно?
  • 1
    Каждое целочисленное деление округляется. Вы просто делаете это слишком рано.
Показать ещё 2 комментария
Теги:

2 ответа

1

Это использует усечение поведения целочисленного деления в C для целых положительных чисел, что является целью вашего упражнения:

void compute_active_users(int nbPeople, int bounceRate) {
    int totalVisitors = nbPeople * (100 - bounceRate) / 100;  
    printf("%d\n", totalVisitors);
}

Ваше решение не работает, потому что эта строка:

int BounceConvert = (b / 100);

будет производить BounceConvert=0 (25/100 → 0)

0

Рассмотрим b/100. В делении Integer, когда b = 25, оно сводится к 0, а не 0.25, как вы ожидаете. Для этого используйте операцию с плавающей запятой.

void compute_active_users(int n, int b) {
     float BounceRate = ((float)n * b)/100; // floating point operation
     int roundedBounceRate = (int) BounceRate; //Integer cast rounds it lowest integer
     int TotalVisitors = (n - roundedBounceRate); // subtract BounceRate  

     printf("%d", TotalVisitors); // print out the final result
}
  • 1
    Но вам не нужны числа с плавающей запятой. Вообще!
  • 0
    так почему это сводится к «0» в делении и почему «n» присоединяется к плавающей запятой в скобках, когда это «b», который должен быть поплавком? Или вы храните всю эту стоимость на поплавке? :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню