Алгоритм разложения числа на цифры.
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Алгоритм разложения числа на цифры.
Необходим алгоритм разложения числа на цифры. Язык-с++. у меня есть кое-что на примете, но получается разложить число, в котором не больше 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. Как мне сделать это все по человечески?
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: Алгоритм разложения числа на цифры.
Поискать что-нибудь про рекурсивные функции и прикрутить ими решение.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Алгоритм разложения числа на цифры.
Прочитал. Рекурсивные ф-ии-это ф-ии, вызывающие сами себя. Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется. Может есть какой-нибудь другой вариант?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Алгоритм разложения числа на цифры.
Посчитать длину цифр - а далее разбить на приемлемые участки 
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Алгоритм разложения числа на цифры.
Если честно-не очень понял. Мне надо число разбить на цифры(число двоичное). Например, 10010101100, надо представить как 1 0 0 1 0 1 0 1 1 0 0
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- Реклама
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Алгоритм разложения числа на цифры.
Допустим так. Пусть программа имеет ограниченность длиной 5 бит.
Исходное число принимает значения от 1 до 18 бит (условно).
На первом шаге определяем число бит.
Далее разделяем их на фрагменты длиной не более 5 бит. При этом заводим переменную в которой указываем сколько фрагментов получилось (для примера из 18 бит будет 4 фрагмента)
Ну а далее каждый фрагмент подвергаем декодированию, учитывая что результат надо скорректировать по степени 2 домножением на 32.
Вот както так
Исходное число принимает значения от 1 до 18 бит (условно).
На первом шаге определяем число бит.
Далее разделяем их на фрагменты длиной не более 5 бит. При этом заводим переменную в которой указываем сколько фрагментов получилось (для примера из 18 бит будет 4 фрагмента)
Ну а далее каждый фрагмент подвергаем декодированию, учитывая что результат надо скорректировать по степени 2 домножением на 32.
Вот както так
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Алгоритм разложения числа на цифры.
Спасибо вам огромное!Но я написал менее сложный алгоритм. Кому интересно, вот программа целиком:
#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();
}
#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: Алгоритм разложения числа на цифры.
Всю тему не читал, расскажу как знаю.
Первый способ - перевести число в строку, потом брать по одному символу из этой строки. Так делали в универе.
Второй способ - отнимать еденицы\десятки\сотни и т.д. и при этом считать сколько чего отнято например как здесь http://www.pcports.ru/articles/avr4.php
Первый способ - перевести число в строку, потом брать по одному символу из этой строки. Так делали в универе.
Второй способ - отнимать еденицы\десятки\сотни и т.д. и при этом считать сколько чего отнято например как здесь http://www.pcports.ru/articles/avr4.php
Раз reset, два reset - полyчи на диске bad !
Тpанзистоp p-n-p. Plug-n-Play ?
У кого что сбоит, тот о том и говорит.
Тpанзистоp p-n-p. Plug-n-Play ?
У кого что сбоит, тот о том и говорит.
Re: Алгоритм разложения числа на цифры.
Это где так говорится? Там, где миллионы итераций используется - да, замедлит, и сильно нагрузит стек. А если с умом использовать - только ускорит.Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется.
По теме - большое число разложить можно только одним способом - представить в виде строки, как и сказал WandererSc. Да по другому и не получится (смотрите ограничения на типы данных)
Re: Алгоритм разложения числа на цифры.
тематические ответы только в форуме, в приват не пишите
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Алгоритм разложения числа на цифры.
достали уже с 2-я вещами:
1. постоянным упоминанием С++ там, где речь идет о чистейшем С - вы вообще разницу между этими языками понимаете?!
2. переводом чисел... уже, блин, тошнит - столько всего на эту тему понаписано, и тем не менее всякий раз она всплывает, как дерьмо в проруби...
P.S. рекурсия, может быть, и не замедляет ничего, зато стек и память жрет - любо-дорого! я бы не советовал увлекаться в микроконтроллерных системах рекурсией, особенно если:
1) нет четкого понимания, что к чему и как оно воообще работает
2) нет заранее известной максимальной глубины погружения в рекурсию.
я пока ограничиваюсь рекурсией в 2 погружения, редко - в три, да и то с учетом надежды на оптимизацию компилятора, который такие рекурсии разворачивает в линейный код.
1. постоянным упоминанием С++ там, где речь идет о чистейшем С - вы вообще разницу между этими языками понимаете?!
2. переводом чисел... уже, блин, тошнит - столько всего на эту тему понаписано, и тем не менее всякий раз она всплывает, как дерьмо в проруби...
P.S. рекурсия, может быть, и не замедляет ничего, зато стек и память жрет - любо-дорого! я бы не советовал увлекаться в микроконтроллерных системах рекурсией, особенно если:
1) нет четкого понимания, что к чему и как оно воообще работает
2) нет заранее известной максимальной глубины погружения в рекурсию.
я пока ограничиваюсь рекурсией в 2 погружения, редко - в три, да и то с учетом надежды на оптимизацию компилятора, который такие рекурсии разворачивает в линейный код.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Алгоритм разложения числа на цифры.
для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18629
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Алгоритм разложения числа на цифры.
я всегда делал так, и не замечал ни тормозов, ни нехватки памяти... боюсь, что такая погоня за скоростью похожа на бой с тенью: устать можно, а победить нельзя...-=SY=- писал(а):для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Алгоритм разложения числа на цифры.
кстати, оригинально.ARV писал(а):я всегда делал так
Re: Алгоритм разложения числа на цифры.
А тут тема про МК? Я думал автор решает задачки просто по прикладному программированию (в свете его недавних вопросов в других темах)
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Алгоритм разложения числа на цифры.
Кстати, да. Нафига мне тут про МК, если программы для компьютера пишу?

Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Re: Алгоритм разложения числа на цифры.
А внутри твоего компьютера что, пенопласт???Pika4u писал(а):Кстати, да. Нафига мне тут про МК, если программы для компьютера пишу?![]()
![]()
![]()
- Pika4u
- Поставщик валерьянки для Кота
- Сообщения: 2064
- Зарегистрирован: Пт апр 24, 2009 11:39:16
- Откуда: г.Оренбург
Re: Алгоритм разложения числа на цифры.
Неа. Мой комп целиком состоит из булочек и конфет))

Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Алгоритм разложения числа на цифры.
А может проще?
Готовая функция itoa(int num, char *res, int numsys); переведёт тебе любое число в любую систему счисления. Если конечно под Винду программируешь.
Код: Выделить всё
#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();
}
I am DX168B and this is my favourite forum on internet!
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Алгоритм разложения числа на цифры.
А что собственно оригинально? С математической точки зрения задача именно так и решается, и реализована там "в лоб".-=SY=- писал(а):кстати, оригинально.ARV писал(а):я всегда делал так
Giggity giggity goo!


