Страница 1 из 1
разложение числа на разряды
Добавлено: Ср фев 01, 2012 20:31:53
electronic255
Как разложить число например (4568) на разряды 4 5 6 8? Используя только сложение и вычитание .Функция должна быть универсальной,даем ей любое число и получаем количество тысяч ,сотен ,десятков и единиц. Пишу на Си. Если такая тема есть,просьба модераторов не материться,поисковиком не нашел,а прочитать 114 страниц терпения не хватит.
Re: разложение числа на разряды
Добавлено: Ср фев 01, 2012 20:36:24
Axon
Отнимаешь по 1000 - считаешь сколько отнялось без перехода через ноль, потом по 100, 10 и по 1.
Re: разложение числа на разряды
Добавлено: Ср фев 01, 2012 20:59:01
demson
Для начала необходимо реализовать 2 базовые ф-и / и % деление без остатка и остаток от деления.
50/10 по десятичной системе.
k=52;
cel=0;
while (k>=10){cel++; k-=10;}
получим cel целых k десятых все просто.
k>=100 это делим на сто с остатком от 0 до 99
Re: разложение числа на разряды
Добавлено: Ср фев 01, 2012 22:25:40
electronic255
demson писал(а):Для начала необходимо реализовать 2 базовые ф-и / и % деление без остатка и остаток от деления.
50/10 по десятичной системе.
k=52;
cel=0;
while (k>=10){cel++; k-=10;}
получим cel целых k десятых все просто.
k>=100 это делим на сто с остатком от 0 до 99
не подходит - можно использовать только сложение,вычитание и сравнение
Re: разложение числа на разряды
Добавлено: Чт фев 02, 2012 08:36:43
Engineer_Keen
electronic255 писал(а):не подходит - можно использовать только сложение,вычитание и сравнение
А в приведенном
demsonом коде есть другие операции?
Re: разложение числа на разряды
Добавлено: Чт фев 02, 2012 09:05:52
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);
}