題單地址:題單中心-東方博宜OJ?
這里以二進制轉十進制為例(按位加權求和法)
1290.?二進制轉換十進制
問題描述
請將一個?25?位以內的?2?進制正整數轉換為?1010?進制!
輸入
一個?25?位以內的二進制正整數。
輸出
該數對應的十進制。
樣例
輸入
111111111111111111111111
輸出
16777215
解析: 按位加權(2^n)求和法。
#include <bits/stdc++.h>
using namespace std;int main() {string s;int n = 0, ans = 1;cin >> s;for(int i = s.size()-1; i >= 0; i--){n += (s[i] - '0') * ans;ans *= 2;}cout << n;return 0;
}
1292.?十六進制轉十進制
問題描述
請將一個不超過10位的十六進制正整數轉換為十進制整數。
輸入
10位以內的十六進制正整數,如果該十六進制中有字母,字母用大寫英文字母表示。
輸出
該數對應的十進制整數。
樣例
輸入
2ECF
輸出
11983
解析:按位加權(16^n)求和法。注意大于10~15要使用字母A~F表達。
#include <bits/stdc++.h>
using namespace std;int main() {string s;long long n = 0, ans = 1;cin >> s;for(int i = s.size()-1; i >= 0; i--){if(s[i] >= '0' && s[i] <= '9')n += (s[i] - '0') * ans;else if(s[i] >= 'A' && s[i] <= 'Z')n += ((s[i] - 'A') + 10) * ans;ans *= 16;}cout << n;return 0;
}
1291.?八進制轉十進制
問題描述
請將一個?20?位以內的八進制數轉換為十進制整數。
輸入
20?位以內的八進制數。
輸出
該數對應的十進制數。
樣例
輸入
77777777777777777777
輸出
1152921504606846975
解析:按位加權(8^n)求和法。
#include <bits/stdc++.h>
using namespace std;int main() {string s;long long n = 0, ans = 1;cin >> s;for(int i = s.size()-1; i >= 0; i--){n += (s[i] - '0') * ans;ans *= 8;}cout << n;return 0;
}
1405.?小麗找潛在的素數
問題描述
小麗同學在編程中學到了二進制數的概念,她發現,有些二進制數,如果轉為?10?進制,就是素數,小麗把這些數稱為潛在的素數;比如?2?進制 1101011,轉為?10?進制后為?107?,就是素數。
請編程幫小麗找出,哪些二進制數轉為?10?進制后,是素數,計算出這樣的數有多少個?
輸入
第一行是一個整數?n(10 ≤ n ≤ 100)。
接下來?n?行,每行是一個?30?位以內的?2?進制數
輸出
一個整數代表所有轉為?10?進制后是素數的?2?進制數的個數。
樣例
輸入
6
1010000
1011
1101001
10111
111
1101011
輸出
4
解析:按位加權(2^n)求和法,將二進制轉十進制,在判斷是否為素數。
#include <bits/stdc++.h>
using namespace std;bool prime(int x){if(x < 2)return 0;for(int i = 2; i <= sqrt(x); i++){if(x % i == 0)return 0;}return 1;
}int main() {int n, sum = 0;cin >> n;while(n--){string s;int m = 0, ans = 1;cin >> s;for(int i = s.size()-1; i >= 0; i--){m += (s[i] - '0') * ans;ans *= 2;}if(prime(m))sum++;}cout << sum;return 0;
}