#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 n;
else
return sum_digits_until_one(sum_digits(n));
}
int main(int argc, char **argv)
{
printf("%d \n", sum_digits_until_one
(98792) == 8); // -> 1 (true) printf("%d \n", sum_digits_until_one
(6841) == 1); // -> 1 (true) printf("%d \n", sum_digits_until_one
(7777) == 1); // -> 1 (true) printf("%d \n", sum_digits_until_one
(12345678) == 9); // -> 1 (true) printf("%d \n", sum_digits_until_one
(90009093) == 3); // -> 1 (true) printf("%d \n", sum_digits_until_one
(21111111111) == 3); // -> 1 (true) printf("-----------------------------------------------------------\n"); printf("%lu \n", sum_digits_until_one
(98792)); // -> 8 (true) printf("%lu \n", sum_digits_until_one
(6841)); // -> 1 (true) printf("%lu \n", sum_digits_until_one
(7777)); // -> 1 (true) printf("%lu \n", sum_digits_until_one
(12345678)); // -> 9 (true) printf("%lu \n", sum_digits_until_one
(90009093)); // -> 3 (true) printf("%lu \n", sum_digits_until_one
(21111111111)); // -> 3 (true) return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgoKLyogUG90xJlnb3dhbmllIHcgaW50ZWdlcmFjaDogaHR0cHM6Ly9lLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5hLm9yZy93aWtpL0V4cG9uZW50aWF0aW9uX2J5X3NxdWFyaW5nKi8KdW5zaWduZWQgbG9uZyBwb3codW5zaWduZWQgbG9uZyBhLCB1bnNpZ25lZCBsb25nIGIpIHsKCWlmIChiID09IDApIHJldHVybiAxOwoJaWYgKGIgPT0gMSkgcmV0dXJuIGE7CglpZiAoYiAlIDIgPT0gMCkgcmV0dXJuIHBvdyhhICogYSwgYiAvIDIpOwoJZWxzZSByZXR1cm4gYSAqIHBvdyhhICogYSwgKGIgLSAxKSAvIDIpOwoJfQoJCgovKiBTdW1hIGN5ZnIgdyBsaWN6YmllLCBwcm9zdGEgb2JzZXJ3YWNqYToga29sZWpuZSBjeWZyeSBsaWN6YnkgbiB0byAob2QgcHJhd2VqKToKICogbiAlIDEwIAogKiBuIC8gMTAgJSAxMAogKiBuIC8gMTAwICUgMTAgCiAqIC4uLi4uCiAqLyAKdW5zaWduZWQgbG9uZyBzdW1fZGlnaXRzKHVuc2lnbmVkIGxvbmcgbil7Cgl1bnNpZ25lZCBsb25nIHMgPSAwOwoJZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBuIC8gcG93KDEwLCBpKSA+IDA7ICsraSkKCQlzICs9IChuIC8gcG93KDEwLCBpKSkgJSAxMDsKCXJldHVybiBzOyAKCX0KCgoKLyogUHJvc3RlLCByZWt1cmVuY3lqbmUgd3l3b8WCeXdhbmllIHN1bXkgY3lmciwgYcW8IGRvIAogKiBwcnp5cGFka3UgYmF6b3dlZ286IGxpY3piYSBqZWRub2N5ZnJvd2VqLCAKICogd3RlZHkgbiAvIDEwID09IDAKICogKi8KdW5zaWduZWQgbG9uZyBzdW1fZGlnaXRzX3VudGlsX29uZSh1bnNpZ25lZCBsb25nIG4pIHsKCWlmIChuIC8gMTAgPT0gMCkgcmV0dXJuIG47CgllbHNlIAoJCXJldHVybiBzdW1fZGlnaXRzX3VudGlsX29uZShzdW1fZGlnaXRzKG4pKTsKCX0KCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKCXByaW50ZigiJWQgXG4iLCBzdW1fZGlnaXRzX3VudGlsX29uZSg5ODc5MikgPT0gOCk7IC8vIC0+IDEgKHRydWUpCglwcmludGYoIiVkIFxuIiwgc3VtX2RpZ2l0c191bnRpbF9vbmUoNjg0MSkgPT0gMSk7IC8vIC0+IDEgKHRydWUpCglwcmludGYoIiVkIFxuIiwgc3VtX2RpZ2l0c191bnRpbF9vbmUoNzc3NykgPT0gMSk7IC8vIC0+IDEgKHRydWUpCglwcmludGYoIiVkIFxuIiwgc3VtX2RpZ2l0c191bnRpbF9vbmUoMTIzNDU2NzgpID09IDkpOyAvLyAtPiAxICh0cnVlKQoJcHJpbnRmKCIlZCBcbiIsIHN1bV9kaWdpdHNfdW50aWxfb25lKDkwMDA5MDkzKSA9PSAzKTsgLy8gLT4gMSAodHJ1ZSkKCXByaW50ZigiJWQgXG4iLCBzdW1fZGlnaXRzX3VudGlsX29uZSgyMTExMTExMTExMSkgPT0gMyk7IC8vIC0+IDEgKHRydWUpCglwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCXByaW50ZigiJWx1IFxuIiwgc3VtX2RpZ2l0c191bnRpbF9vbmUoOTg3OTIpKTsgLy8gLT4gOCAodHJ1ZSkKCXByaW50ZigiJWx1IFxuIiwgc3VtX2RpZ2l0c191bnRpbF9vbmUoNjg0MSkpOyAvLyAtPiAxICh0cnVlKQoJcHJpbnRmKCIlbHUgXG4iLCBzdW1fZGlnaXRzX3VudGlsX29uZSg3Nzc3KSk7IC8vIC0+IDEgKHRydWUpCglwcmludGYoIiVsdSBcbiIsIHN1bV9kaWdpdHNfdW50aWxfb25lKDEyMzQ1Njc4KSk7IC8vIC0+IDkgKHRydWUpCglwcmludGYoIiVsdSBcbiIsIHN1bV9kaWdpdHNfdW50aWxfb25lKDkwMDA5MDkzKSk7IC8vIC0+IDMgKHRydWUpCglwcmludGYoIiVsdSBcbiIsIHN1bV9kaWdpdHNfdW50aWxfb25lKDIxMTExMTExMTExKSk7IC8vIC0+IDMgKHRydWUpCglyZXR1cm4gMDsKfQ==