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

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

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

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

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

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

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

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

Моя проблема в том, что я не знаю как работать в С++ с таким числом(2.7182818284590452353602875) и как задавать округление.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2015, 13:03
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от nmcf Посмотреть сообщение
Число задавай в виде строки. Округлять будешь вручную поразрядно.
C++
1
std::string s = "2.7182818284590452353602875";
Как округлять поразрядно?
0
zss
Модератор
Эксперт С++
7057 / 6603 / 4178
Регистрация: 18.12.2011
Сообщений: 17,400
Завершенные тесты: 1
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
nmcf
6265 / 5575 / 2534
Регистрация: 14.04.2014
Сообщений: 23,468
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
17935 / 11926 / 2478
Регистрация: 24.12.2010
Сообщений: 24,007
19.04.2015, 13:39 #6
zss, В строчке 11. А вдруг s[n-1]=='9' ? Будет работать?

Добавлено через 2 минуты
nmcf, у вас с этим моментом, кажется, все в порядке (во всяком случае, вы на это обратили внимание). Но в деталях я не смотрел.
1
ValeryS
Модератор
7210 / 5473 / 681
Регистрация: 14.02.2011
Сообщений: 18,513
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
nmcf
6265 / 5575 / 2534
Регистрация: 14.04.2014
Сообщений: 23,468
19.04.2015, 13:59 #8
Не хватит диапазона ни у long long, ни у double.
1
ValeryS
Модератор
7210 / 5473 / 681
Регистрация: 14.02.2011
Сообщений: 18,513
19.04.2015, 14:14 #9
прошу пардона
Цитата Сообщение от ValeryS Посмотреть сообщение
7182818284590452353
это не
Цитата Сообщение от Nicko Посмотреть сообщение
7182818284590452353602875
вот что значит доверять калькуляторам
решение свое снимаю
можно было конечно пришпандорить длинную арифметику, но решение, по моему, будет сложнее чем со строками
0
BatSovn
0 / 0 / 0
Регистрация: 09.11.2016
Сообщений: 1
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
09.11.2016, 14:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2016, 14:57

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

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

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


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

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

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