求优化

P1143 进制转换

天呐,你是怎么做到把二进制的 `11111111` 转换成十六进制的 `1515` 的?(正确答案是 `FF`。)
by Zaoly @ 2024-04-04 00:43:47


@[Zaoly](/user/349869) 改正了~谢谢~
by wisdom2010 @ 2024-04-06 22:48:31


@[Zaoly](/user/349869) ```cpp #include<bits/stdc++.h> using namespace std; int n; string a; /* A B C D E F 10 11 12 13 14 15 */ const int maxn = 100000 + 5; int ans[maxn]; int sum = 0; int j = 0; int b[maxn]; int m; int f(int j) { int mn = 1; for(int i = 0; i < j; i++) mn *= n; return mn; } int main() { cin >> n; cin >> a; cin >> m; int len = a.size(); for(int i = 0; i < len; i++) { if(a[i] == 'A') ans[i] = 10; else if(a[i] == 'B') ans[i] = 11; else if(a[i] == 'C') ans[i] = 12; else if(a[i] == 'D') ans[i] = 13; else if(a[i] == 'E') ans[i] = 14; else if(a[i] == 'F') ans[i] = 15; else ans[i] = a[i] - '0'; } for(int i = len - 1; i >= 0; i--) { sum += f(j) * ans[i]; j++; } int i = 0; while(sum > 0) { b[i] = sum % m; sum /= m; i++; } while(i > 0) { i--; if(b[i] == 10) { cout << "A"; continue; } else if(b[i] == 11) { cout << "B"; continue; } else if(b[i] == 12) { cout << "C"; continue; } else if(b[i] == 13) { cout << "D"; continue; } else if(b[i] == 14) { cout << "E"; continue; } else if(b[i] == 15) { cout << "F"; continue; } cout << b[i]; } return 0; } ```
by wisdom2010 @ 2024-04-06 22:49:01


|