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

Разложение числа по цифрам - C++

Восстановить пароль Регистрация
 
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
21.03.2011, 17:48     Разложение числа по цифрам #1
Здравствуйте, вообщем возникла такая проблема вроде бы и написал уже программу разложения числа по цифрам. но работает она магическим образом: с нечетными цифрами как надо, а вот с четными только половину цифр выводит.
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
//main.cpp
#include <iostream>
#include <rzfunc.h>
 
using namespace std;
 
int main ()
{
 cout<<"enter the string: ";
 int key,core=1;
 cin>>key;
 int number[rz_nsize(key)];
 for (int i = 1;i != rz_nsize(key);i++)
 {
     core*=10;
 }
 for (int i=0;i != rz_nsize(key);i++)
 {
 number[i]=key/core;
 key=key-number[i]*core;
 core/=10;
 cout<<number[i]<<endl;
 }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//rzfunc.h
int rz_nsize (int number)
{
    int core=1;
    for (int i=0;1;i++)
    {
        if (number/core==0)
        {
            return i;
        }
        core*=10;
    }
    return 0;
}
Помогите решить проблему, сам уже ума не приложу, что я не так написал.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 17:48     Разложение числа по цифрам
Посмотрите здесь:

Разложение Натурального числа C++
C++ Разложение числа
C++ Разложение натурального числа
C++ Разложение натурального числа
Разложение числа на слагаемые C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dexter
 Аватар для Dexter
284 / 144 / 16
Регистрация: 13.10.2009
Сообщений: 164
21.03.2011, 18:10     Разложение числа по цифрам #2
Исходя из вашего кода:
C++
1
2
3
4
5
6
7
for (int i=0;i != rz_nsize(key);i++)
 {
 number[i]=key/core;
 key=key-number[i]*core;
 core/=10;
 cout<<number[i]<<endl;
 }
Здесь будет ошибка, почему:
Пусть key вначале будет 1234, то после прохождения цикла он станет key=key-number[i]*core; тоесть 234, а параметр i увеличится до единицы, потом он станет 1. На следующем шаге key станет 34, а i=2 после чего выйдет с цикла. Почему у вас работает с нечетным количеством цифер неизвестно, так как должен вылетать за пределы массива и ругаться потом, как i станет отрицательным, так как i == rz_nsize(key) не произойдет никогда, а i будет все время увеличиваться.
Поменяйте на
C++
1
for (int i=0;0 != rz_nsize(key);i++)

P.S. Да и вот такое у меня компилятор не кушает
C++
1
int number[rz_nsize(key)];
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
21.03.2011, 18:17  [ТС]     Разложение числа по цифрам #3
Цитата Сообщение от Dexter Посмотреть сообщение
Поменяйте на
Код C++
1
for (int i=0;0 != rz_nsize(key);i++)
Апд, точно, спасибо что косвенно мне глаза открыли, я как то просчитался с областью жизни переменных, у меня же вышло что я с одним и тем же int key работаю.Чем дальше в программирование тем больше ноги и мозг ломаешь. Спасибо за помощь.
Цитата Сообщение от Dexter Посмотреть сообщение
P.S. Да и вот такое у меня компилятор не кушает
Код C++
1
2
int number[rz_nsize(key)];
У меня g++ из под ubuntu схавал. IDE: eclipse. OFFTOP: Какой компилятор у вас?
Тут скорее надо просто:
C++
1
int number[(rz_nsize(key)];
IrineK
Заблокирован
21.03.2011, 18:31     Разложение числа по цифрам #4
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
26
27
28
#include <iostream>
using namespace std;
 
int main ()
{ int i,num,cur,N=0;
 cout<<"Number = ";
 cin>>num;
 
 cur=num;
 while(cur)//определение к-ва цифр N
 {  cur/=10;
    N++;
 }
 
 int* ar=new int[N];
 for(i=N-1;i>-1;i--) //заполнение массива цифр
 {   ar[i]=num%10;
        num/=10;
 }
 
 for(i=0;i<N;i++) //вывод результата
    cout<<ar[i]<<"  ";
 
 delete []ar;
 
 cin.sync(); cin.get();
 return 0;
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
21.03.2011, 18:35     Разложение числа по цифрам #5
попробуйте так,только для вывода используйте сбывающийся цикл фор.

C++
1
2
3
4
5
while(a)
    {
        cout<<a%10<<" ";
        a/=10;
    }
так же можно вместо cout написать к примеру x[i]=;

Добавлено через 27 секунд
опоздал
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
21.03.2011, 18:46  [ТС]     Разложение числа по цифрам #6
IrineK,^Tecktonik_KiLLeR ну вы уже излагаете код искусно, как поэт, мне такого не понять, не по моим мозгам. Так, что я и своим быдлокодом доволен)
IrineK
Заблокирован
21.03.2011, 18:53     Разложение числа по цифрам #7
В чем причина удовольствия, если это на хрен не работает?
Новая форма отклонений?
Razzeeyy
 Аватар для Razzeeyy
30 / 7 / 2
Регистрация: 01.03.2011
Сообщений: 95
21.03.2011, 18:58  [ТС]     Разложение числа по цифрам #8
Цитата Сообщение от IrineK Посмотреть сообщение
В чем причина удовольствия, если это на хрен не работает?
Новая форма отклонений?
Ну после поправки Dexter'a у меня это дело начало работать.
Форма отклонений называется "Я нехочу заморачиваться с работой с памятью и пр., так как я это пока не понимаю, да и надобности в этом нету. Каждый дрочит, как он хочет.))"
Понимаю что заядлый программист может потешить свое самолюбие за счет не достаточно хорошего кода новичка, но может не стоит? Кто не был новичков, к тому же мы не виртуально-ментальные гопники (я думаю), чтобы утверждаться за счет слабых.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.03.2011, 19:00     Разложение числа по цифрам #9
Razzeeyy, Программист должен придерживаться правил. Пусть даже будущий программист. А каждый дрочет как он хочет - фигня, ага.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 21:07     Разложение числа по цифрам
Еще ссылки по теме:

Разложение числа C++
C++ Разложение числа на цифры
C++ разложение числа

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

Или воспользуйтесь поиском по форуму:
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
21.03.2011, 21:07     Разложение числа по цифрам #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void r (int i)
{
     if (!i) 
        return;
     r (i/10);
     std::cout << i%10 << " ";
}
 
int main()
{
    int i;
    std::cin >> i;
    r (i);
    return 0;    
}
мега-рекурсивная функция для разложения числа по цыфрам и их последующего вывода на экран
Yandex
Объявления
21.03.2011, 21:07     Разложение числа по цифрам
Ответ Создать тему
Опции темы

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