разложение числа на разряды

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
electronic255
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт окт 05, 2010 20:57:19

разложение числа на разряды

Сообщение electronic255 »

Как разложить число например (4568) на разряды 4 5 6 8? Используя только сложение и вычитание .Функция должна быть универсальной,даем ей любое число и получаем количество тысяч ,сотен ,десятков и единиц. Пишу на Си. Если такая тема есть,просьба модераторов не материться,поисковиком не нашел,а прочитать 114 страниц терпения не хватит.
Аватара пользователя
Axon
Нашел транзистор. Понюхал.
Сообщения: 152
Зарегистрирован: Вс дек 23, 2007 20:16:58
Откуда: Днепропетровск
Контактная информация:

Re: разложение числа на разряды

Сообщение Axon »

Отнимаешь по 1000 - считаешь сколько отнялось без перехода через ноль, потом по 100, 10 и по 1.
Аватара пользователя
demson
IT KT
Сообщения: 1309
Зарегистрирован: Пн авг 25, 2008 08:49:33
Контактная информация:

Re: разложение числа на разряды

Сообщение demson »

Для начала необходимо реализовать 2 базовые ф-и / и % деление без остатка и остаток от деления.
50/10 по десятичной системе.
k=52;
cel=0;
while (k>=10){cel++; k-=10;}

получим cel целых k десятых все просто.

k>=100 это делим на сто с остатком от 0 до 99
в спорах рождается ИСТИНА [AND] flud.
electronic255
Встал на лапы
Сообщения: 81
Зарегистрирован: Вт окт 05, 2010 20:57:19

Re: разложение числа на разряды

Сообщение electronic255 »

demson писал(а):Для начала необходимо реализовать 2 базовые ф-и / и % деление без остатка и остаток от деления.
50/10 по десятичной системе.
k=52;
cel=0;
while (k>=10){cel++; k-=10;}

получим cel целых k десятых все просто.

k>=100 это делим на сто с остатком от 0 до 99

не подходит - можно использовать только сложение,вычитание и сравнение
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: разложение числа на разряды

Сообщение Engineer_Keen »

electronic255 писал(а):не подходит - можно использовать только сложение,вычитание и сравнение

А в приведенном demsonом коде есть другие операции?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: разложение числа на разряды

Сообщение ibiza11 »

Engineer_Keen, просто топикстартер читает, видимо, исключительно по диагонали.

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

unsigned long bin_bcd(unsigned short a)
{
  //структура для функции bin_bcd 0-9999
  struct
  {
    unsigned char tens,hundreds,thousands;
    unsigned short units;
  }bcd;
 
  bcd.tens=0x30;
  bcd.hundreds=0x30;
  bcd.thousands=0x30;
  bcd.units=a;
  if(bcd.units>=1000)
  {
    while (bcd.units>=1000)
    {
      bcd.units-=1000;
      bcd.thousands++;
    }
  }
  if(bcd.units>=100)
  {
    while (bcd.units>=100)
    {
      bcd.units-=100;
      bcd.hundreds++;
    }
  }
  if(bcd.units>=10)
  {
    while (bcd.units>=10)
    {
      bcd.units-=10;
      bcd.tens++;
    }
  }
  bcd.units+=0x0030;
  return((long)bcd.thousands<<24|(long)bcd.hundreds<<16|bcd.tens<<8|bcd.units);
}
Ставим плюсы: )
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»