fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <limits.h>
  4.  
  5. unsigned long long fib(int n) {
  6. if (n == 0 || n == 1)
  7. return 1;
  8.  
  9. unsigned long long f0 = 1, f1 = 1, fn;
  10. for (int i = 2; i <= n; i++) {
  11. fn = f0 + f1;
  12. f0 = f1;
  13. f1 = fn;
  14. }
  15. return fn;
  16. }
  17.  
  18. unsigned long long power(int n, int k) {
  19. unsigned long long result = 1;
  20. for (int i = 0; i < k; i++) {
  21. result *= n;
  22. }
  23. return result;
  24. }
  25.  
  26. int main(void) {
  27. int k;
  28. printf("整数kを入力してください:");
  29. scanf("%d", &k);
  30.  
  31. int min_n = 1;
  32. unsigned long long min_diff = ULLONG_MAX;
  33.  
  34. for (int n = 1; n <= 100; n++) {
  35. unsigned long long fn = fib(n);
  36. unsigned long long nk = power(n, k);
  37.  
  38. unsigned long long diff = fn > nk ? fn - nk : nk - fn;
  39.  
  40. if (diff < min_diff) {
  41. min_diff = diff;
  42. min_n = n;
  43. }
  44. }
  45.  
  46. printf("fnとn^kの差が最小になるnは:%d\n", min_n);
  47. return 0;
  48. }
  49.  
Success #stdin #stdout 0.01s 5292KB
stdin
55
stdout
整数kを入力してください:fnとn^kの差が最小になるnは:1