Форум программистов, компьютерный форум CyberForum.ru

Разделение числа на цифры - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
wwmwwm
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 17:38     Разделение числа на цифры #1
Смущает часть моего алгоритма
Для разделения числа на цифры я сделал следующее:
Вместо int для числа использовал string(так как можно выделять каждый элемент отдельно)
Потом создал вектор типа int. И присвоил каждому элементу vector значение соответствующего элемента string. Но как показали эксперименты, что бы правильно перевести из string в vector<int> нужно отнять 48:
c[index] = a[index] - 48;
Меня это сильно смущает. Этот алгоритм меньше других, но вот отнятие 48. Будет ли этот алгоритм действовать в других компиляторах и операционных системах?

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 "stdafx.h"
#include<iomanip>
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
 
using namespace std;
 
int main()
{
string a;
cin >> a;
vector<int> c(a.size());
for(int index = 0; index <a.size(); ++index) {
    c[index] = a[index] - 48;
}
for(int index = 0; index<c.size(); index++) {
    cout << c[index] << endl;
}
    system("PAUSE");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.07.2013, 17:46     Разделение числа на цифры #2
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
17.07.2013, 17:51     Разделение числа на цифры #3
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
wwmwwm
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 17:52  [ТС]     Разделение числа на цифры #4
Цитата Сообщение от Tulosba Посмотреть сообщение
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
Попробовал, не вышло. Дело в том, что когда я string заношу в вектор int, 1 превращается в 49, 2 в 50, 3 в 51, и т.д.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.07.2013, 17:55     Разделение числа на цифры #5
Цитата Сообщение от wwmwwm Посмотреть сообщение
Попробовал, не вышло.
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
wwmwwm
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 17:56  [ТС]     Разделение числа на цифры #6
Цитата Сообщение от MousePro Посмотреть сообщение
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
Я об этом уже думал. Но как быть если число намного больше. При увеличении числа, например 1000, или 1000000, нужно отдельно алгоритм писать

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
Может я что то не так сделал? Я заменил 48 на 0, и ничего
Или ноль нужно написать не в виде числа, а так: '0'?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.07.2013, 18:02     Разделение числа на цифры #7
Цитата Сообщение от wwmwwm Посмотреть сообщение
Или ноль нужно написать не в виде числа, а так: '0'?
так. с одинарными кавычками.
В принципе, строки не нужны в Вашем случае. Можно хотя бы так попробовать:
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
#include <iostream>
#include <stack>
 
int main() {
    
    int n;
    std::cin >> n;
    std::stack<int> s;
    
    if( !n ) s.push( 0 );
    
    while( n )
    {
        s.push( n%10 );
        n /= 10;
    }
    
    while( !s.empty() )
    {
        std::cout << s.top() << std::endl;
        s.pop();
    }
    
    return 0;
}
Belfegor
17.07.2013, 18:05
  #8

Не по теме:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
 
using std::cout;
using std::endl;
using std::cin;
 
int main() {
    std::string s;
    cin >> s;
    std::vector<int>v;
    for (int i = 0; i < s.length(); i++) {
        v.push_back(s[i] - '0');
    }
    for (int x : v)cout << x << ' ';
    cout << endl;
    cout << v[2] + v[3] << endl;
    return 0;
}

wwmwwm
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 18:16  [ТС]     Разделение числа на цифры #9
Цитата Сообщение от Tulosba Посмотреть сообщение
так. с одинарными кавычками.
В принципе, строки не нужны в Вашем случае. Можно хотя бы так попробовать:
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
#include <iostream>
#include <stack>
 
int main() {
    
    int n;
    std::cin >> n;
    std::stack<int> s;
    
    if( !n ) s.push( 0 );
    
    while( n )
    {
        s.push( n%10 );
        n /= 10;
    }
    
    while( !s.empty() )
    {
        std::cout << s.top() << std::endl;
        s.pop();
    }
    
    return 0;
}
Я не очень много знаю, так что часть этой программы я не понял. Но смысл как я понимаю такой: определение размера числа, а потом по величине числа поделить сколько то раз на 10?

Добавлено через 3 минуты

Добавлено через 36 секунд
Но опять же. Спасибо вам всем. Но меня интересует следующее: Нормально ли я сделал с отнятием 48 или '0', или это полный бред и лучше не кому это больше не показывать, что бы не засмеяли?
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.07.2013, 18:21     Разделение числа на цифры #10
Цитата Сообщение от wwmwwm Посмотреть сообщение
Нормально ли я сделал с отнятием 48 или '0'
C '0', я думаю, нормально. Может быть в каких-то экзотических кодировках (где цифры идут не подряд) и будет глючить, но я пока такого не видел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 18:35     Разделение числа на цифры
Еще ссылки по теме:

C++ Замена последней цифры на значение наименьшей цифры в записи числа N
C++ Разделение числа на целую и дробную части
C++ Получить число М, которое образуется из числа N путем замены последней цифры на значение наибольшей цифры

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
17.07.2013, 18:35     Разделение числа на цифры #11
Цитата Сообщение от wwmwwm Посмотреть сообщение
Нормально ли я сделал с отнятием 48 или '0', или это полный бред и лучше не кому это больше не показывать, что бы не засмеяли?
нормально
вот коды цифр в ASCII(символ шестнадцатеричное десятичное)
'0' 0x30 48
'1' 0x31 49
'2' 0x32 50
'3' 0x33 51
'4' 0x34 52
'5' 0x35 53
'6' 0x36 54
'7' 0x37 55
'8' 0x38 56
'9' 0x39 57
вот ссылка на статью про все символы
http://ru.wikipedia.org/wiki/ASCII

Добавлено через 1 минуту
а еще можешь сделать так
C++
1
int a=c&0x0f;
c это символ
Yandex
Объявления
17.07.2013, 18:35     Разделение числа на цифры
Ответ Создать тему
Опции темы

Текущее время: 08:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru