spamsink: (Default)
[personal profile] spamsink
На эту

Без единого гвоздя умножения, деления или вычисления остатка, прошу заметить.

// 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);
}
Page generated Mar. 12th, 2026 01:52 am
Powered by Dreamwidth Studios