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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
#1

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

17.07.2013, 17:38. Просмотров 1332. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 17:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разделение числа на цифры (C++):

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

Разделение числа на отдельные цифры - C++
int a, cout&lt;&lt;&quot;Введите пятизначное число: &quot;; cin&gt;&gt;a; cout&lt;&lt;&quot;1я цифра&quot;&lt;&lt;(a/10000)&lt;&lt;&quot;\n&quot;; cout&lt;&lt;&quot;2я цифра&quot;&lt;&lt;(a/1000)%10&lt;&lt;&quot;\n&quot;; ...

Как реализовать разделение числа на цифры через цикл? - C++
Как реализовать через цикл в C разделение числа на цифры и записать их в отдельные переменные, для последующих действий с ними

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

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

Циклы: найти произведение последней цифры и минимальной цифры числа с произведением всех остальных - C++
Помогите, я даже не знаю о чем речь(((( Дано натуральное число n. Найти произведение последней цифры и минимальной цифры этого числа...

10
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.07.2013, 17:46 #2
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
0
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
17.07.2013, 17:51 #3
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
0
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, и т.д.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.07.2013, 17:55 #5
Цитата Сообщение от wwmwwm Посмотреть сообщение
Попробовал, не вышло.
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
0
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'?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
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', или это полный бред и лучше не кому это больше не показывать, что бы не засмеяли?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.07.2013, 18:21 #10
Цитата Сообщение от wwmwwm Посмотреть сообщение
Нормально ли я сделал с отнятием 48 или '0'
C '0', я думаю, нормально. Может быть в каких-то экзотических кодировках (где цифры идут не подряд) и будет глючить, но я пока такого не видел.
1
ValeryS
Модератор
6676 / 5085 / 475
Регистрация: 14.02.2011
Сообщений: 17,061
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
17.07.2013, 18:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2013, 18:35
Привет! Вот еще темы с ответами:

Вывести сумму первой и третьей цифры и произведение второй и четвертой цифры числа, заданного пользователем - C++
Пользователь вводит 4-значное число - программа выводит сумму первой и третьей цифры и произведение второй и четвертой цифры.

Получить число М, которое образуется из числа N путем замены последней цифры на значение наибольшей цифры - C++
Помогите составить программу, пожалуйста! Вот условие: Дано натуральное число N. Получить новое число М, которое образуется из числа...

Образовать новое число, путём замены последней цифры на значение наименьшей цифры в записи исходного числа - C++
Помогите доделать задачу, минимальную цифру нашёл, последнюю цифру нашёл, только осталось присвоить значение минимальной цифры последней,...

В десятичной записи числа 42*4* пропущены 2 цифры. Определите эти цифры, если известно, что число кратно 72. - C++
Помогите,пожалуйста! С++


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

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

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