Ответ на программистскую задачу
Jan. 11th, 2008 05:18 pmНа эту
Без единогогвоздя умножения, деления или вычисления остатка, прошу заметить.
Без единого
// Given an integer represented as a big-endian array of base 'b' digits,
// converts it into base 'b+1'.
void stepup (int b, unsigned char digits[], int n)
{
for (int i=n-1; i>0; i--) {
for (int j=1; j <= i; j++) {
if ( (char) (digits[j] -= digits[j-1]) < 0 ) {
digits[j] += b+1;
digits[j-1] -= 1;
}
}
}
}
// Given an integer represented as an array of base-8 digits, transform it to base 10.
void octal2decimal (unsigned char digits[], int n)
{
stepup(8, digits, n);
stepup(9, digits, n);
}