

Программирование, язык с++
Среднее значение последовательности
Определите среднее значение всех элементов последовательности, завершающейся числом 0. Сам ноль в последовательность не входит.
Использовать массивы в данной задаче нельзя.
Входные данные
Вводится последовательность целых чисел, не равных 0, оканчивающаяся числом 0 (само число 0 в последовательность не входит, а служит признаком её окончания).
Выходные данные
Выведите ответ задачи.
Примеры
Ввод
1
7
9
0
Вывод
5.66666666667
МОЙ КОД:
#include <iostream>
using namespace std;
int main ()
{
int a,sum=0,cnt=0;
cin >> a;
while (a>0) {
sum=sum+a;
cnt=cnt+1;
cin >> a;
}
cout << sum/cnt;
return 0;
}
ПРОБЛЕМА В ТОМ, ЧТО Я НЕ ПОНИМАЮ, КАК ИМЕННО В С++ СДЕЛАТЬ ТАК, ЧТОБЫ ОТВЕТ ВЫВОДИЛСЯ В БЕСКОНЕЧНОЙ ДЕСЯТИЧНОЙ ДРОБИ. то есть я понимаю, что / - это целая часть от деления, а % - это дробная часть от деления.
#include <iostream>
using namespace std;
class Sequence {
size_t count = 0;
long long sum = 0LL;
public:
bool add(const int value) {
if (!value) return false;
sum += value;
++count;
return true;
}
double average() const {
return static_cast<double>(sum) / static_cast<double>(count);
}
};
int main() {
cout.setf(ios::fixed);
cout.precision(15);
Sequence sequence;
int value;
do cin >> value; while (sequence.add(value));
cout << sequence.average() << '\n';
}
Любой из целых операндов в делении приводится к double. Тогда и весь результат деления будет double.
Число выводимых знаков задается с помощью метода precision перед выводом.
cout.precision(10); //будет выводится 10 значащих цифр
cout << (double)sum/cnt; //sum приведен здесь к типу double
Целые числа могут быть и отрицательными, так что проверка a>0 вряд ли уместна.
Для того, чтобы ответ выводился с бесконечной десятичной дробью в C++, можно использовать оператор деления с плавающей точкой (/) и привести один из операндов к типу данных с плавающей точкой. Например, можно привести переменные sum и cnt к типу double, чтобы результат деления был с плавающей точкой. Вот пример исправленного кода:
#include <iostream>
using namespace std;
int main() {
int a, cnt = 0;
double sum = 0.0;
cin >> a;
while (a > 0) {
sum = sum + a;
cnt = cnt + 1;
cin >> a;
}
cout << fixed << sum / cnt;
return 0;
}