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

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

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

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

17.07.2013, 17:38. Просмотров 1255. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 17:38     Разделение числа на цифры
Посмотрите здесь:

Разделение числа на цифры - 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 разделение числа на цифры и записать их в отдельные переменные, для последующих действий с ними

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

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

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

Разделение числа - C++
Ув.Форумчане. Возможно ли както методами языка разделить вещественное число на целую и вещественную часть в отдельные переменные?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.07.2013, 17:55     Разделение числа на цифры #5
Цитата Сообщение от wwmwwm Посмотреть сообщение
Попробовал, не вышло.
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
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
:)
Эксперт С++
4393 / 3236 / 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;
}
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
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
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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++
Подскажите,алгоритм программы,которая выполняет разделение числа на разряды. Т.е вводится число,например, 456 и программа выводит...

Разделение числа на целую и дробную части - C++
Добрый день! Можно ли разделить число например 95.05 на 95 и 05 и как это сделать?

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

Разделение десятичных триад числа в строке - C++
есть строчка например 12345678 а должно вывести 12 345 678... типа справа должно черес 3 ставить пробел!

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


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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
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     Разделение числа на цифры
Ответ Создать тему
Опции темы

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