Необходим алгоритм разложения числа на цифры. Язык-с++. у меня есть кое-что на примете, но получается разложить число, в котором не больше 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. Мы помним, как ты преобразовал наш мир....
Прочитал. Рекурсивные ф-ии-это ф-ии, вызывающие сами себя. Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется. Может есть какой-нибудь другой вариант?
Steve Jobs. 1955-2011. Мы помним, как ты преобразовал наш мир....
Допустим так. Пусть программа имеет ограниченность длиной 5 бит.
Исходное число принимает значения от 1 до 18 бит (условно).
На первом шаге определяем число бит.
Далее разделяем их на фрагменты длиной не более 5 бит. При этом заводим переменную в которой указываем сколько фрагментов получилось (для примера из 18 бит будет 4 фрагмента)
Ну а далее каждый фрагмент подвергаем декодированию, учитывая что результат надо скорректировать по степени 2 домножением на 32.
Вот както так
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Первый способ - перевести число в строку, потом брать по одному символу из этой строки. Так делали в универе.
Второй способ - отнимать еденицы\десятки\сотни и т.д. и при этом считать сколько чего отнято например как здесь http://www.pcports.ru/articles/avr4.php
Раз reset, два reset - полyчи на диске bad !
Тpанзистоp p-n-p. Plug-n-Play ?
У кого что сбоит, тот о том и говорит.
Но, почти везде говорится, что лучше рекурсивными функциями не пользоваться, так как они сильно замедляют работу программы, чего мне очень не хочется.
Это где так говорится? Там, где миллионы итераций используется - да, замедлит, и сильно нагрузит стек. А если с умом использовать - только ускорит.
По теме - большое число разложить можно только одним способом - представить в виде строки, как и сказал WandererSc. Да по другому и не получится (смотрите ограничения на типы данных)
достали уже с 2-я вещами:
1. постоянным упоминанием С++ там, где речь идет о чистейшем С - вы вообще разницу между этими языками понимаете?!
2. переводом чисел... уже, блин, тошнит - столько всего на эту тему понаписано, и тем не менее всякий раз она всплывает, как дерьмо в проруби...
P.S. рекурсия, может быть, и не замедляет ничего, зато стек и память жрет - любо-дорого! я бы не советовал увлекаться в микроконтроллерных системах рекурсией, особенно если:
1) нет четкого понимания, что к чему и как оно воообще работает
2) нет заранее известной максимальной глубины погружения в рекурсию.
я пока ограничиваюсь рекурсией в 2 погружения, редко - в три, да и то с учетом надежды на оптимизацию компилятора, который такие рекурсии разворачивает в линейный код.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
-=SY=- писал(а):для МК самый быстрый и минимально "жрущий" память - это отнимать сотни, десятки, единицы и считать количество этих итераций соответственно для каждого разряда.
я всегда делал так, и не замечал ни тормозов, ни нехватки памяти... боюсь, что такая погоня за скоростью похожа на бой с тенью: устать можно, а победить нельзя...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...