Цитата(ТарасАтавин @ 30.8.2013, 05:54 ) | | Это всегда даст правильный результат? |
Ну а как Вы думаете?
Цитата(ТарасАтавин @ 30.8.2013, 05:54 ) | | Тогда перенос единицы в частное при получении тройки и четвёрки |
Да. Только 3 в остатке заменяется на "двойной минус", а 4 - на "одинарный минус":| Код | #include <stdio.h>
void toBase( int num, int base, const char *syms) { char buf[128], rbuf[128]; int orig = num, negative, n = 0, i;
if( num < 0 ) { negative = 1; num = -num; } else negative = 0;
if( num == 0 ) buf[n++] = syms[0]; else while( num != 0 ) { int rem = num % base; num /= base;
if( rem > base/2 ) num++; if( negative && rem > 0 ) rem = base - rem;
buf[n++] = syms[rem]; }
for( i = 0; i < n; i++) rbuf[i] = buf[n-i-1]; rbuf[n] = '\0';
printf( "%d(%d) = %s\n", orig, base, rbuf); }
#define BASE3 3 const char *syms3 = "0+-";
#define BASE5 5 const char *syms5 = "0+#=-";
int main( void ) { int num; for( num = -100; num <= 100; num++) toBase( num, BASE3, syms3); for( num = -100; num <= 100; num++) toBase( num, BASE5, syms5); return 0; }
|
|