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

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

17.07.2013, 17:38. Просмотров 2862. Ответов 10
Метки нет (Все метки)

Смущает часть моего алгоритма
Для разделения числа на цифры я сделал следующее:
Вместо 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2013, 17:38
Ответы с готовыми решениями:

Разделение числа на цифры
правильная ли программа?(по алгоритму выполнения) задание:напишите программу которая вводит число...

Разделение числа на отдельные цифры
int a, cout&lt;&lt;&quot;Введите пятизначное число: &quot;; cin&gt;&gt;a; cout&lt;&lt;&quot;1я...

Как реализовать разделение числа на цифры через цикл?
Как реализовать через цикл в C разделение числа на цифры и записать их в отдельные переменные, для...

Сравнить цифры числа, указать какие цифры этого числа равны между собой
Пользователь вводит любое целое число. Сравнить 1 и 2 цифру числа и указать какие еще цифры этого...

10
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 17:46 2
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
17.07.2013, 17:51 3
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
0
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, и т.д.
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 17:55 5
Цитата Сообщение от wwmwwm Посмотреть сообщение
Попробовал, не вышло.
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
0
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'?
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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;
}
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;
}

0
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', или это полный бред и лучше не кому это больше не показывать, что бы не засмеяли?
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 18:21 10
Цитата Сообщение от wwmwwm Посмотреть сообщение
Нормально ли я сделал с отнятием 48 или '0'
C '0', я думаю, нормально. Может быть в каких-то экзотических кодировках (где цифры идут не подряд) и будет глючить, но я пока такого не видел.
1
Модератор
Эксперт по электронике
8321 / 6174 / 828
Регистрация: 14.02.2011
Сообщений: 21,452
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 это символ
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2013, 18:35

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

Замена последней цифры на значение наименьшей цифры в записи числа N
Ошибка в задании Условие:Дано натуральное число N. Получить новое число М, которое образуется из...

Определить позицию первой цифры числа, которая меньше цифры заданной пользователем
Добрый вечер! Прошу помощи. Есть задача - Дано пятизначное число, введенное пользователем и...

Сложить цифры числа (до тех пор, пока не получится сумма из одной цифры)
Всем Доброго времени суток. Первая программа заключается в том что с клавиатуры вводится число...

Разделение числа на цифры
Здравствуйте,делаю одно задание по Python на циклы. Я понимаю что надо разделять число на цифры с...


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

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

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