2 solutions
-
5
题意
求 层汉诺塔最少移多少步
思路
很好,看样例就知道公式是 。不过既然在高精度里面,那这数据肯定不会小
PS: 的位数是 4500 多位
代码
#include <bits/stdc++.h> using namespace std; int a[5000] = {1}; // 长度是 4500 多,这里开大一点 int main(int argc, char **argv){ int n; cin >> n; // 公式:2 ^ n - 1 while (n--){ int jw = 0; // 进位 for (int i = 0;i < 5000;i++){ a[i] *= 2; // 先乘 2 a[i] += jw; // 再加上上一位进位 jw = a[i] / 10; // 算下一位进位 a[i] %= 10; // 保留个位 } } a[0]--; // 个位减 1 int len = 5000; while (a[len] == 0 && len > 0) len--; // 清除多余的 0 for (int i = len;i >= 0;i--){ // 输出 cout << a[i]; } return 0; }
-
2
#include<bits/stdc++.h> using namespace std; int a[15010]; int main() { a[1]=1; unsigned long long n; cin>>n; if(n<=63) { unsigned long long a=1; for(int i=1;i<=n;i++) { a*=2; } cout<<a-1<<endl; return 0; } else { for(int i=1;i<=n;i++) { for(int j=1;j<=10000;j++) { a[j]=a[j]*2; } for(int j=1;j<=10000;j++) { if(a[j]>=10) { a[j+1]+=1; a[j]-=10; } } } a[1]-=1; int i=10000; for(i=10000;i>=1;i--) { if(a[i]!=0) break; } for(;i>=1;i--) cout<<a[i]; } return 0; }
啊!回来吧我的打表,我最骄傲的信仰!❤️
- 1
Information
- ID
- 983
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 7
- Tags
- # Submissions
- 118
- Accepted
- 23
- Uploaded By