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

Функция перевода строки в число

07.04.2019, 09:15. Показов 1659. Ответов 1
Метки нет (Все метки)

Здравствуйте, решил написать свою функцию перевода строки в число, т.к встроенная stoi() не работает с большими строками, а в тестах задачи такие есть. Возник баг, почему при переводе получается число на единицу меньше требуемого? Привожу код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
 
int convert_string_to_int (string s)
{
    int num = 0;
    for (int i = 0; i < s.size(); ++i)
    {
        int a = s[i] - 48;
        int b = s.size() - (i+1);
        num = num + (a * pow(10, b));
    }
    return num;
}
 
int main ()
{
    string str = "53690";
    cout << convert_string_to_int(str);
    return 0;
}
Для строки "53690" функция возвращает 53689
UPD: Для строки "536900005" функция вобще возвращает 536900003, то есть на 2 меньше

Добавлено через 30 минут
UPD 2: Решил проблему) Оказывается проблема была с функцией возведения в степень pow, написал свою и все отлично заработало. Вот код, кому интересно:
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
29
30
31
32
33
34
35
#include <iostream>
#include <string>
 
using namespace std;
 
int64_t pow10 (int degree)
{
    int64_t number = 1;
    for (int64_t i = 0; i < degree; ++i)
    {
        number = number * 10;
    }
    return number;
}
 
int64_t convert_string_to_int (string s)
{
    int64_t num = 0;
    for (int64_t i = 0; i < s.size(); ++i)
    {
        int64_t a = s[i] - 48;
        int64_t b = s.size() - (i+1);
        int64_t c = a * pow10(b);
        cout << c << endl;
        num = num + c;
    }
    return num ;
}
 
int main ()
{
    string str = "53690000035";
    cout << convert_string_to_int(str);
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2019, 09:15
Ответы с готовыми решениями:

Обобщенная функция перевода строки в число
В книге &quot;С++. Сборник рецептов&quot; нашел обобщенную функцию преобразования строки в число: #include...

Написать программу удаления из текстового файла символов перевода строки ‘\n’ и перевода каретки ‘\r’
Здравствуйте,помогите написать программу на подобии этой,только не подсчета,а удаления.Заранее...

Функция перевода из Float в Hex
Подскажите функции для перевода вещественного числа в шестнадцатеричное число, и будет ли она...

Функция перевода символа в цифру
Здравствуйте! Хочу написать программу для перевода символа в цифру с помощью функции. int...

1
Модератор
Эксперт С++
11482 / 9400 / 5650
Регистрация: 18.12.2011
Сообщений: 25,114
07.04.2019, 09:21 2
Лучший ответ Сообщение было отмечено smurf19458 как решение

Решение

pow(a,b) - это exp(b*log(a))
Т.е. она работает через преобразование чисел в double.
Соответственно, ошибки округления могую привести к неточному результату
C++
1
2
3
4
5
6
7
8
9
10
long long convert_string_to_int (string s)
{
    long long num = 0;
    for (int i = 0; i < s.size(); ++i)
    {
        num*=10;
        num+= s[i] - '0';
    }
    return num;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2019, 09:21

Функция перевода из 10-ричной СС в 80-ричную СС
Здравствуйте, как реализовать функцию перевода из 10-ричной СС, в 80-ричную СС ? подход перевода...

Функция перевода систем счисления
Написать функцию с параметром перевода десятичного числа из системы с основанием меньше 10 в...

Функция перевода из десятичной в двоичную систему
Здравствуйте, помогите пожалуйста написать функцию перевод из десятеричной в двоичную систему....

рекурсивна функция перевода двоичных цифр в десятичное
Написать рекурсивную функцию перевода двоичных цифр в эквивалентное десятичное число....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru