#include <stdio.h>
/* Potęgowanie w integerach: https://e...content-available-to-author-only...a.org/wiki/Exponentiation_by_squaring*/
unsigned long pow(unsigned long a
, unsigned long b
) { if (b == 0) return 1;
if (b == 1) return a;
if (b
% 2 == 0) return pow(a
* a
, b
/ 2); else return a
* pow(a
* a
, (b
- 1) / 2); }
/* Suma cyfr w liczbie, prosta obserwacja: kolejne cyfry liczby n to (od prawej):
* n % 10
* n / 10 % 10
* n / 100 % 10
* .....
*/
unsigned long sum_digits(unsigned long n){
unsigned long s = 0;
for (unsigned long i
= 0; n
/ pow(10, i
) > 0; ++i
) s
+= (n
/ pow(10, i
)) % 10; return s;
}
/* Proste, rekurencyjne wywoływanie sumy cyfr, aż do
* przypadku bazowego: liczba jednocyfrowej,
* wtedy n / 10 == 0
* */
unsigned long sum_digits_until_one(unsigned long n) {
if (n / 10 == 0) return;
else
return sum_digits_until_one(sum_digits(n));
}
int main(int argc, char **argv)
{
printf("%lu \n", sum_digits_until_one
(98792) == 8); // -> 1 (true) printf("%lu \n", sum_digits_until_one
(6841) == 1); // -> 1 (true) return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKLyogUG90xJlnb3dhbmllIHcgaW50ZWdlcmFjaDogaHR0cHM6Ly9lLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nKi8KdW5zaWduZWQgbG9uZyBwb3codW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpIHsKICAgIGlmIChiID09IDApIHJldHVybiAxOwogICAgaWYgKGIgPT0gMSkgcmV0dXJuIGE7CiAgICBpZiAoYiAlIDIgPT0gMCkgcmV0dXJuIHBvdyhhICogYSwgYiAvIDIpOwogICAgZWxzZSByZXR1cm4gYSAqIHBvdyhhICogYSwgKGIgLSAxKSAvIDIpOwogICAgfQogCi8qIFN1bWEgY3lmciB3IGxpY3piaWUsIHByb3N0YSBvYnNlcndhY2phOiBrb2xlam5lIGN5ZnJ5IGxpY3pieSBuIHRvIChvZCBwcmF3ZWopOgogKiBuICUgMTAgCiAqIG4gLyAxMCAlIDEwCiAqIG4gLyAxMDAgJSAxMCAKICogLi4uLi4KICovIAp1bnNpZ25lZCBsb25nIHN1bV9kaWdpdHModW5zaWduZWQgbG9uZyBuKXsKICAgIHVuc2lnbmVkIGxvbmcgcyA9IDA7CiAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IG4gLyBwb3coMTAsIGkpID4gMDsgKytpKQogICAgICAgIHMgKz0gKG4gLyBwb3coMTAsIGkpKSAlIDEwOwogICAgcmV0dXJuIHM7IAogICAgfQogCi8qIFByb3N0ZSwgcmVrdXJlbmN5am5lIHd5d2/Fgnl3YW5pZSBzdW15IGN5ZnIsIGHFvCBkbyAKICogcHJ6eXBhZGt1IGJhem93ZWdvOiBsaWN6YmEgamVkbm9jeWZyb3dlaiwgCiAqIHd0ZWR5IG4gLyAxMCA9PSAwCiAqICovCnVuc2lnbmVkIGxvbmcgc3VtX2RpZ2l0c191bnRpbF9vbmUodW5zaWduZWQgbG9uZyBuKSB7CiAgICBpZiAobiAvIDEwID09IDApIHJldHVybjsKICAgIGVsc2UgCiAgICAgICAgcmV0dXJuIHN1bV9kaWdpdHNfdW50aWxfb25lKHN1bV9kaWdpdHMobikpOwogICAgfQogCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogICAgcHJpbnRmKCIlbHUgXG4iLCBzdW1fZGlnaXRzX3VudGlsX29uZSg5ODc5MikgPT0gOCk7IC8vIC0+IDEgKHRydWUpCiAgICBwcmludGYoIiVsdSBcbiIsIHN1bV9kaWdpdHNfdW50aWxfb25lKDY4NDEpID09IDEpOyAvLyAtPiAxICh0cnVlKQogICAgcmV0dXJuIDA7Cn0=