diff --git a/z1.c b/z1.c new file mode 100644 index 0000000..9467d3b --- /dev/null +++ b/z1.c @@ -0,0 +1,65 @@ +#include + +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; +}