Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
1

Str TO long int

24.11.2015, 04:40. Показов 2422. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предистория:
Есть символьная строка "68037543430" (к слову подобных строк 100к), её нужно преобразовать в число.
Раньше я это легко делал с помощю функции atoi(). Но теперь число не влазит в диапазон int (переводит как 2147483647). Погуглив, я нашел функцию atol(), которая якобы делает тоже самое, только переводит строку в тип long int, НО на выходе я все так же получил 2147483647!

Вопрос:
Как перевести строку "68037543430" в число?!


Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void CharToInt(char * pSymb, int cSize, lli * pAr)
{
    int nCount(0);
    char * pWords[MAX_WORDS], *pToken;
    pToken = strtok(pSymb, "\n");
    while (pToken != NULL && nCount < MAX_WORDS)
    {
        pWords[nCount++] = pToken;
        pToken = strtok(NULL, "\n");
    }
 
    for (int i(0); i < MAX_WORDS; ++i)
    {
        pAr[i] = atol(pWords[i]);
    }
}
Вот моя функция разделения строки на слова и перевода слов в числа. Повторюсь, с меньшими числами все работало.

Добавлено через 1 час 44 минуты
Все делается с помощью функции atoll
Киньте спасибо за ответ сам себе=)))
3
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2015, 04:40
Ответы с готовыми решениями:

Ошибка перевода из Str в Int
Доброго времени суток...Подскажите в чём ошибка! Вот код void __fastcall...

Как преобразовать long int в строку
Подскажите пожалуйста функцию преобразования long int в строку

В чем разница между long int и short int
Извините если вопрос нубский, но я ни как не могу понять смысл long int и short int. Например с...

void _fastcall TForm1::Vector(int x0, int y0, int a, int l);
//--------------------------------------------------------------------------- #include...

4
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.11.2015, 06:47 2
Цитата Сообщение от andreyananas Посмотреть сообщение
Все делается с помощью функции atoll
Есть strtol
0
27 / 27 / 11
Регистрация: 15.10.2013
Сообщений: 880
24.11.2015, 06:54  [ТС] 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Есть strtol
Она не помогла
0
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
24.11.2015, 07:07 4
andreyananas,
Вот сложение двух натуральных. там и перевод я делал из сточки и обратно.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>//adding
#include<cstring>
#include<vector>
#include<iterator>
using namespace std;
 
 
typedef vector<char> Charvec;
 
void Summ(int&sum,bool& z);
void Compare(char A[],char B[], char*&a,char*&b);
Charvec sum(char a[],char b[],Charvec ch);
int main(){
    char A[]="9999";
    char B[]="111111111111111";
    Charvec ch;
    char*a;
    char*b;
    Compare(A,B,a,b);
 
 
    ch=sum(a,b,ch);
    for(int i=0;i<ch.size();i++)
    cout<<ch[i];    
    
 
    return 0;
}
void Summ(int&sum,bool& z){ 
      sum-=10;
      z=1;  
}
void Compare(char A[],char B[], char*&a,char*&b){
    if(strlen(A)>=strlen(B)){
        a=A;
        b=B;
    }else{
        a=B;
        b=A;
    }
    
}
Charvec sum(char a[],char b[],Charvec ch){
    int l1=strlen(a);
    int l2=strlen(b);
    int sum=0,x=0,y=0;
    bool z=0;
 
    while(l2>=0){
        x=(int)(a[l1]-48);
        y=(int)(b[l2]-48);
            if(z==1){
              sum+=1;
              z=0;
            }
     
      sum+=x+y;
      if(sum>=10)
      Summ(sum,z);
    
    ch.insert(ch.begin(),(char)(sum+48));
    sum=0;
            l1--;
            l2--;       
    }
    if(l1!=-1){
        while(l1>=0){
            x=(int)(a[l1]-48);
            if(z==1){
                sum+=1;
                z=0;
            }
            sum+=x;
            if(sum>=10)
            Summ(sum,z);
    ch.insert(ch.begin(),(char)(sum+48));
    sum=0;
    l1--;           
        }
    }
 
    if(z==1)
    ch.insert(ch.begin(),'1');
    ch[ch.size()-1]='\0';
    
    return ch;
}
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.11.2015, 15:09 5
StrToInt64()
0
24.11.2015, 15:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2015, 15:09
Помогаю со студенческими работами здесь

[C++ Error] Unit1.cpp(50): E2316 '_fastcall TForm1::Vector(int,int,int,int)' is not a member of 'TForm1'
есть событие набраное в Unit.cpp, при запуске программы выбивается ошибка: Unit1.cpp(50): E2316...

unsigned long long и Builder 2010
В общем, такая проблема: написал программу на Builder 2006 (реализация шифрования 3DES). Работала...

Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в степень p
Требуется написать функцию long long pow(long long a, unsigned int p), которая возводит число a в...

Быстрое вычисление наибольшего общего делителя для unsigned long long int
Даны два числа типа unsigned long long int, в них могут оказаться любые представимые значения,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru