Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 03.12.2014
Сообщений: 2
1

Вывести в выходной файл округленное до n знаков после десятичной точки число E

19.04.2015, 13:03. Просмотров 3010. Ответов 9
Метки нет (Все метки)

Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки, равно 2.7182818284590452353602875.

Входные данные

Входной файл INPUT.TXT содержит целое число n (0 ≤ n ≤ 25).

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.

Моя проблема в том, что я не знаю как работать в С++ с таким числом(2.7182818284590452353602875) и как задавать округление.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2015, 13:03
Ответы с готовыми решениями:

Выведите в выходной файл округленное до n знаков после десятичной точки число E
Как пишутся очень короткие программы на C++ или C (менее 150 символов, не считая пробелов и...

Вывести в файл число с заданным количеством знаков после точки
Как это сделать, нигде не нашёл.(

Округлить число до 25 знаков после десятичной точки
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить ...

Округление числа до n знаков после десятичной точки
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал...

9
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.04.2015, 13:06 2
Число задавай в виде строки. Округлять будешь вручную поразрядно.
C++
1
std::string s = "2.7182818284590452353602875";
1
0 / 0 / 0
Регистрация: 03.12.2014
Сообщений: 2
19.04.2015, 13:11  [ТС] 3
поразрядно это как?

Добавлено через 1 минуту
поразрядно? как?

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Число задавай в виде строки. Округлять будешь вручную поразрядно.
C++
1
std::string s = "2.7182818284590452353602875";
Как округлять поразрядно?
0
Модератор
Эксперт С++
10150 / 8499 / 5165
Регистрация: 18.12.2011
Сообщений: 22,738
19.04.2015, 13:21 4
Лучший ответ Сообщение было отмечено Nicko как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char s[]= "7182818284590452353602875";
int n;cin>>n;
if(n>25)n=25;
cout<<"2.";
for(i=0;i<n-1;i++)
   cout<<s[i];
if(n==25)
   cout<<s[24]<<endl; // округлять нечего
else
  if(s[n]>='5')
    cout<<char(s[n-1]+1)<<endl;// округляем в плюс
  else
    cout<<s[n-1]<<endl;   // обрезаем
1
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.04.2015, 13:31 5
Не совсем оптимально, но работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    int n;
 
    std::cin >> n;
 
    std::string s = "2.7182818284590452353602875";
 
    if (n == 0) s = "3";
    else
        if (n < 25)
        {
            int c = s[n + 2] - '0' > 4 ? 1 : 0;
 
            for (int i = n + 1; i > 1; --i)
            {
                int d = s[i] - '0' + c;
                s[i] = (d % 10) + '0';
                c = d > 9 ? 1 : 0;
            }
 
            s.resize(n + 2);
        }
 
    std::cout << s << std::endl;
0
Эксперт C
25083 / 15587 / 3331
Регистрация: 24.12.2010
Сообщений: 33,787
19.04.2015, 13:39 6
zss, В строчке 11. А вдруг s[n-1]=='9' ? Будет работать?

Добавлено через 2 минуты
nmcf, у вас с этим моментом, кажется, все в порядке (во всяком случае, вы на это обратили внимание). Но в деталях я не смотрел.
1
Модератор
Эксперт по электронике
8321 / 6174 / 828
Регистрация: 14.02.2011
Сообщений: 21,452
19.04.2015, 13:56 7
Цитата Сообщение от Nicko Посмотреть сообщение
2.7182818284590452353602875.
ну ежли больше не надо то
вот такой вариант
C++
1
2
3
4
5
6
unsigned long long int dec=7182818284590452353602875;
unsigned int n;cin>>n;
unsigned int tmp=25-n;
unsigned int tmp1=pow(10.0,tmp);
dec=(dec+(tmp1/2))/tmp1;
cout<<2<<'.'<<dec;
не проверял, критика приветствуется
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
19.04.2015, 13:59 8
Не хватит диапазона ни у long long, ни у double.
1
Модератор
Эксперт по электронике
8321 / 6174 / 828
Регистрация: 14.02.2011
Сообщений: 21,452
19.04.2015, 14:14 9
прошу пардона
Цитата Сообщение от ValeryS Посмотреть сообщение
7182818284590452353
это не
Цитата Сообщение от Nicko Посмотреть сообщение
7182818284590452353602875
вот что значит доверять калькуляторам
решение свое снимаю
можно было конечно пришпандорить длинную арифметику, но решение, по моему, будет сложнее чем со строками
0
0 / 0 / 0
Регистрация: 09.11.2016
Сообщений: 2
09.11.2016, 14:57 10
Вы не учли, что если n==0,то программа должна вывести 3,т.к. округлит до целых

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
using namespace std;
 
int main()
{
    char s[] = "7182818284590452353602875";
    int n;
    cin >> n;
 
    if (n == 0)
        cout << "3";
 
    if (n != 0)
    {
        if (n > 25)
            n = 25;
        cout << "2.";
        for (int i = 0; i < n - 1; i++)
            cout << s[i];
        if (n == 25)
            cout << s[24] << endl;
        else if (s[n] >= '5')
            cout << char(s[n - 1] + 1) << endl;
        else
            cout << s[n - 1] << endl;
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2016, 14:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вычислить функцию с точностью 6 знаков после десятичной точки
)Вычислить функцию f(x,a)= при x=0.4, 0.6,..., 1.2 и a=2, 3, 4, 5 с точностью 6 знаков после...

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи...

Вывести первую цифру после десятичной точки.
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. При...

Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки
Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки. Я думал, что это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.