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

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
jonic
Встал на лапы
Сообщения: 96
Зарегистрирован: Чт май 22, 2008 12:43:16

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

Сообщение jonic »

а если так, с побитовыми операциями:

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

char test=0x30;//0x00110000;
	unsigned long e;
	for(e=0;e<8;e++)
		if((test>>e) & 0x00000001)
			//then 1
		else 
			//then 0
Реклама
Balliil
Родился
Сообщения: 2
Зарегистрирован: Вт окт 16, 2012 14:53:26

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

Сообщение Balliil »

value = 5478;

digit1 = value%10000/1000; //digit1 = 5
digit2 = value%1000/100; //digit1 = 4
digit3 = value%100/10; //digit1 = 7
digit4 = value%10; //digit1 = 8
Реклама
Аватара пользователя
РадиоЛоматель
Мудрый кот
Сообщения: 1733
Зарегистрирован: Чт авг 21, 2008 22:03:30
Откуда: Одесса(Украина)
Контактная информация:

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

Сообщение РадиоЛоматель »

Если хотите плюсов - вот вам. Пользую это и в МК, и на компе. Не нужно связываться с itoa и прочими радостями.

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

unsigned char dig_base = 10; //База системы счисления, в которую выполняем разложение
long long val = 123456789; //Входное число
unsigned char* digits = new unsigned char[1];
int pos = 0;
while(val>0)
{
realoc(digits, sizeof(unsigned char) * (pos+1));
digits[pos] = (unsigned char)((long long)val%dig_base);
val = val/(long long)dig_base ;
pos++;
}
после выполнения - digits содержит массив цифр, pos - количество цифр в этом числе. Если у вас фиксированное количество цифр - убираем realoc в цикле и вверху объявляем new unsigned char[DIGITS_COUNT]; В таком случае работать будет чуть быстрее.
(*tmp) &= ~( ( (param1 & (1<<PARAM1_BIT6)) || ((param2==PARAM2_TRUE)&&(--param3)) ) ? (param1 & (~param2)) : (Func1() | FUNC1_FLAGS) );
Люблю Си...
Ответить

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