Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75

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

17.07.2013, 17:38. Показов 4594. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2013, 17:38
Ответы с готовыми решениями:

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

Разделение числа на отдельные цифры
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я...

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

10
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 17:46
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
17.07.2013, 17:51
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
0
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 17:52  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
wwmwwm, 48 - это ASCII код символа '0'. Поэтому лучше заменить 48 на '0'.
Попробовал, не вышло. Дело в том, что когда я string заношу в вектор int, 1 превращается в 49, 2 в 50, 3 в 51, и т.д.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 17:55
Цитата Сообщение от wwmwwm Посмотреть сообщение
Попробовал, не вышло.
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
0
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
17.07.2013, 17:56  [ТС]
Цитата Сообщение от MousePro Посмотреть сообщение
Я так понял Вам надо из числа получить каждый разряд?? т.е. 159 = 1 5 9 ?если так то почему бы не сделать так
a/100
(a/10)%10
Я об этом уже думал. Но как быть если число намного больше. При увеличении числа, например 1000, или 1000000, нужно отдельно алгоритм писать

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
Что значит не вышло? ASCII-код символа '0' это 48. С точки зрения результата ничего не должно было измениться по сравнению с Вашим кодом.
Может я что то не так сделал? Я заменил 48 на 0, и ничего
Или ноль нужно написать не в виде числа, а так: '0'?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 18:02
Цитата Сообщение от 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
17.07.2013, 18:05

Не по теме:

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  [ТС]
Цитата Сообщение от 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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
17.07.2013, 18:21
Цитата Сообщение от wwmwwm Посмотреть сообщение
Нормально ли я сделал с отнятием 48 или '0'
C '0', я думаю, нормально. Может быть в каких-то экзотических кодировках (где цифры идут не подряд) и будет глючить, но я пока такого не видел.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
17.07.2013, 18:35
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.07.2013, 18:35
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru