Алгоритм разложения числа на цифры.

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Необходим алгоритм разложения числа на цифры. Язык-с++. у меня есть кое-что на примете, но получается разложить число, в котором не больше 10 цифр.
long y1=100000000;
.
.
.
.
n1=binary%10;
n2=(binary%100-n1)/10;
n3=(binary%1000-n1)/100;
n4=(binary%10000-n1)/1000;
n5=(binary%100000-n1)/10000;
n6=(binary%1000000-n1)/100000;
n7=(binary%10000000-n1)/1000000;
n8=(binary%100000000-n1)/10000000;
n9=(binary%1000000000-n1)/y1;
r=(n9*256)+(n8*128)+(n7*64)+(n6*32)+(n5*16)+(n4*8)+(n3*4)+(n2*2)+(n1*1);
Это алгоритм перевода двоичного числа в десятичное.
Но! Если я пытаюсь сделать перевод числа с 10 цифрами, то компилятор ругается на превышение. То есть он ругается на число 1000000000. Как мне сделать это все по человечески?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Реклама
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение Meteor »

Поискать что-нибудь про рекурсивные функции и прикрутить ими решение.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Прочитал. Рекурсивные ф-ии-это ф-ии, вызывающие сами себя. Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется. Может есть какой-нибудь другой вариант?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение Meteor »

Посчитать длину цифр - а далее разбить на приемлемые участки :idea:
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Если честно-не очень понял. Мне надо число разбить на цифры(число двоичное). Например, 10010101100, надо представить как 1 0 0 1 0 1 0 1 1 0 0
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Реклама
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение Meteor »

Допустим так. Пусть программа имеет ограниченность длиной 5 бит.
Исходное число принимает значения от 1 до 18 бит (условно).
На первом шаге определяем число бит.
Далее разделяем их на фрагменты длиной не более 5 бит. При этом заводим переменную в которой указываем сколько фрагментов получилось (для примера из 18 бит будет 4 фрагмента)
Ну а далее каждый фрагмент подвергаем декодированию, учитывая что результат надо скорректировать по степени 2 домножением на 32.
Вот както так
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Реклама
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Спасибо вам огромное!Но я написал менее сложный алгоритм. Кому интересно, вот программа целиком:
#include <stdio.h>
#include <conio.h>
main()
{
int sys,n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,n18,n19,n20,n21,n22,n23,n24,binary,r;
long y1=100000000;
printf("Программа для перевода чисел между системами счисления.\n");
printf("Введите систему счисления: ");
scanf("%d",&sys);
printf("Введите число: ");
scanf("%d", &binary);
switch (sys)
{
case 10:
n1=binary/2;
n2=binary%2;
n3=n1/2;
n4=n1%2;
n5=n3/2;
n6=n3%2;
n7=n5/2;
n8=n5%2;
n9=n7/2;
n10=n7%2;
n11=n9/2;
n12=n9%2;
n13=n11/2;
n14=n11%2;
n15=n13/2;
n16=n13%2;
n17=n15/2;
n18=n15%2;
n19=n17/2;
n20=n17%2;
n21=n19/2;
n22=n19%2;
n23=n21/2;
n24=n21%2;
printf("%d%d%d%d%d%d%d%d%d%d%d%d\n",n24,n22,n20,n18,n16,n14,n12,n10,n8,n6,n4,n2);
break;
case 2:
n1=binary%10;
n2=binary/10;
n3=n2%10;
n4=n2/10;
n5=n4%10;
n6=n4/10;
n7=n6%10;
n8=n6/10;
n9=n8%10;
n10=n8/10;
n11=n10%10;
n12=n10/10;
n13=n12%10;
n14=n12/10;
n15=n14%10;
n16=n14/10;
n17=n16%10;
n18=n16/10;
n19=n18%10;
n20=n18/10;
r=n19*512+n17*256+n15*128+n13*64+n11*32+n9*16+n7*8+n5*4+n3*2+n1*1;
printf("Ваше число: %d\n",r);
break;
}
getch();
}
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
WandererSc
Друг Кота
Сообщения: 4077
Зарегистрирован: Вс мар 22, 2009 17:31:41

Re: Алгоритм разложения числа на цифры.

Сообщение WandererSc »

Всю тему не читал, расскажу как знаю.

Первый способ - перевести число в строку, потом брать по одному символу из этой строки. Так делали в универе.
Второй способ - отнимать еденицы\десятки\сотни и т.д. и при этом считать сколько чего отнято например как здесь http://www.pcports.ru/articles/avr4.php
Раз reset, два reset - полyчи на диске bad !
Тpанзистоp p-n-p. Plug-n-Play ?
У кого что сбоит, тот о том и говорит.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Алгоритм разложения числа на цифры.

Сообщение ploop »

Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется.
Это где так говорится? Там, где миллионы итераций используется - да, замедлит, и сильно нагрузит стек. А если с умом использовать - только ускорит.

По теме - большое число разложить можно только одним способом - представить в виде строки, как и сказал WandererSc. Да по другому и не получится (смотрите ограничения на типы данных)
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Re: Алгоритм разложения числа на цифры.

Сообщение kalobyte »

тематические ответы только в форуме, в приват не пишите
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18629
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение ARV »

достали уже с 2-я вещами: :kill:
1. постоянным упоминанием С++ там, где речь идет о чистейшем С - вы вообще разницу между этими языками понимаете?!
2. переводом чисел... уже, блин, тошнит - столько всего на эту тему понаписано, и тем не менее всякий раз она всплывает, как дерьмо в проруби...

P.S. рекурсия, может быть, и не замедляет ничего, зато стек и память жрет - любо-дорого! я бы не советовал увлекаться в микроконтроллерных системах рекурсией, особенно если:
1) нет четкого понимания, что к чему и как оно воообще работает
2) нет заранее известной максимальной глубины погружения в рекурсию.

я пока ограничиваюсь рекурсией в 2 погружения, редко - в три, да и то с учетом надежды на оптимизацию компилятора, который такие рекурсии разворачивает в линейный код.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
-=SY=-
Открыл глаза
Сообщения: 40
Зарегистрирован: Пн янв 19, 2009 12:08:54
Откуда: belarus

Re: Алгоритм разложения числа на цифры.

Сообщение -=SY=- »

для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18629
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение ARV »

-=SY=- писал(а):для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
я всегда делал так, и не замечал ни тормозов, ни нехватки памяти... боюсь, что такая погоня за скоростью похожа на бой с тенью: устать можно, а победить нельзя...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
-=SY=-
Открыл глаза
Сообщения: 40
Зарегистрирован: Пн янв 19, 2009 12:08:54
Откуда: belarus

Re: Алгоритм разложения числа на цифры.

Сообщение -=SY=- »

ARV писал(а):я всегда делал так
кстати, оригинально.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Алгоритм разложения числа на цифры.

Сообщение ploop »

А тут тема про МК? Я думал автор решает задачки просто по прикладному программированию (в свете его недавних вопросов в других темах)
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Кстати, да. Нафига мне тут про МК, если программы для компьютера пишу? :))) :))) :))) :)))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
-=SY=-
Открыл глаза
Сообщения: 40
Зарегистрирован: Пн янв 19, 2009 12:08:54
Откуда: belarus

Re: Алгоритм разложения числа на цифры.

Сообщение -=SY=- »

Pika4u писал(а):Кстати, да. Нафига мне тут про МК, если программы для компьютера пишу? :))) :))) :))) :)))
А внутри твоего компьютера что, пенопласт???
Аватара пользователя
Pika4u
Поставщик валерьянки для Кота
Сообщения: 2064
Зарегистрирован: Пт апр 24, 2009 11:39:16
Откуда: г.Оренбург

Re: Алгоритм разложения числа на цифры.

Сообщение Pika4u »

Неа. Мой комп целиком состоит из булочек и конфет)) :))) :))) :)))
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

Re: Алгоритм разложения числа на цифры.

Сообщение DX168B »

А может проще?

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#include <display.h> //Это мой личный заголовочник, по этому не ищите его нигде.

void main(void)
{
	int numb=0;
	char result0[30];
	char result1[50];
	display("Введите число в десятичном формате:");
	cin >> numb;
	itoa(numb, result0, 2);
	sprintf(result1, "Результат в двоичном формате: %s", result0);
	display(result1);
	itoa(numb, result0, 8);
	sprintf(result1, "Результат в восьмиричном формате: %s", result0);
	display(result1);
	itoa(numb, result0, 16);
	sprintf(result1, "Результат в шестнадцатиричном формате: %s", result0);
	display(result1);
	_getch();
}
Готовая функция itoa(int num, char *res, int numsys); переведёт тебе любое число в любую систему счисления. Если конечно под Винду программируешь.
I am DX168B and this is my favourite forum on internet!
Foks
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Re: Алгоритм разложения числа на цифры.

Сообщение Foks »

-=SY=- писал(а):
ARV писал(а):я всегда делал так
кстати, оригинально.
А что собственно оригинально? С математической точки зрения задача именно так и решается, и реализована там "в лоб".
Giggity giggity goo!
Ответить

Вернуться в «Умные мысли»