fork download
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5.  
  6. void TooLargeNumPow(int n, int arr[]) // 2의 21승 이상인 경우
  7. {
  8. arr[0] = 2;
  9. int carry = 0; // carry가 1이 되면 자리 올림
  10. for (int i = 0; i < n - 1; i++)
  11. {
  12. if (i == 0)
  13. arr[i] *= 2;
  14. for (int j = 0; j < i; j++)
  15. {
  16. arr[j] *= 2;
  17. arr[j] += carry;
  18. if (arr[j] >= 10) {
  19. carry = 1;
  20. arr[j] -= 10;
  21. }
  22. else
  23. carry = 0;
  24. }
  25. }
  26.  
  27. arr[0] -= 1; // 1을 빼줌
  28.  
  29. int start = 99;
  30. for (int i = 99; i > -1; i--)
  31. {
  32. if (arr[start] == 0) //시작부분을 구함
  33. {
  34. start--;
  35. continue;
  36. }
  37.  
  38. cout << arr[i];
  39. }
  40. }
  41. void Hanoi(int n, int source, int middle, int destination) //전형적인 하노이 알고리즘
  42. {
  43. if (n == 1)
  44. {
  45. cout << source << " " << destination << "\n";
  46. return;
  47. }
  48.  
  49. Hanoi(n - 1, source, destination, middle);
  50. cout << source << " " << destination << "\n";
  51. Hanoi(n - 1, middle, source, destination);
  52.  
  53. }
  54. int main()
  55. {
  56. //혹시나 계산이 느려질까봐
  57. ios_base::sync_with_stdio(false);
  58. cin.tie(NULL);
  59. cout.tie(NULL);
  60.  
  61. //시작부분
  62. int arr[100] = { 0 };
  63. int n;
  64. cin >> n;
  65. if (n <= 20) {
  66. cout << pow(2, n) - 1 << "\n";
  67. //Hanoi(n, 1, 2, 3);
  68. }
  69. else {
  70. TooLargeNumPow(n, arr);
  71. }
  72.  
  73. }
  74.  
Success #stdin #stdout 0s 4396KB
stdin
20
stdout
1.04858e+06