66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
|
|
#include <stdio.h>
|
||
|
|
|
||
|
|
int przestaw_calls = 0;
|
||
|
|
|
||
|
|
int przestaw(int n) {
|
||
|
|
przestaw_calls++;
|
||
|
|
|
||
|
|
int r = n % 100;
|
||
|
|
int a = r / 10;
|
||
|
|
int b = r % 10;
|
||
|
|
n = n / 100;
|
||
|
|
|
||
|
|
if (n > 0) {
|
||
|
|
return a + 10 * b + 100 * przestaw(n);
|
||
|
|
} else {
|
||
|
|
if (a > 0) {
|
||
|
|
return a + 10 * b;
|
||
|
|
} else {
|
||
|
|
return b;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
int main() {
|
||
|
|
int test_values[] = {316498, 43657688, 154005710, 998877665};
|
||
|
|
int num_tests = sizeof(test_values) / sizeof(test_values[0]);
|
||
|
|
|
||
|
|
printf("| n | Wykonanie funkcji przestaw | Liczba wywolan funkcji przestaw |\n");
|
||
|
|
printf("|---|---|---|\n");
|
||
|
|
|
||
|
|
for (int i = 0; i < num_tests; i++) {
|
||
|
|
przestaw_calls = 0;
|
||
|
|
int result = przestaw(test_values[i]);
|
||
|
|
printf("| %d | %d | %d |\n", test_values[i], result, przestaw_calls);
|
||
|
|
}
|
||
|
|
|
||
|
|
// For the very large number 998877665544321, we need to use long long
|
||
|
|
long long large_value = 998877665544321LL;
|
||
|
|
przestaw_calls = 0;
|
||
|
|
|
||
|
|
// We need a modified version for long long
|
||
|
|
long long przestaw_ll(long long n) {
|
||
|
|
przestaw_calls++;
|
||
|
|
|
||
|
|
long long r = n % 100;
|
||
|
|
long long a = r / 10;
|
||
|
|
long long b = r % 10;
|
||
|
|
n = n / 100;
|
||
|
|
|
||
|
|
if (n > 0) {
|
||
|
|
return a + 10 * b + 100 * przestaw_ll(n);
|
||
|
|
} else {
|
||
|
|
if (a > 0) {
|
||
|
|
return a + 10 * b;
|
||
|
|
} else {
|
||
|
|
return b;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
long long large_result = przestaw_ll(large_value);
|
||
|
|
printf("| 998877665544321 | %lld | %d |\n", large_result, przestaw_calls);
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|