信息学奥赛一本通 1413:确定进制 | OpenJudge NOI 1.13 34:确定进制 | OpenJudge NOI 2.1 1973:确定进制
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1413:确定进制 | OpenJudge NOI 1.13 34:确定进制 | OpenJudge NOI 2.1 1973:确定进制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1413:確定進制
OpenJudge NOI 1.13 34:確定進制
OpenJudge NOI 2.1 1973:確定進制
注意:兩OJ平臺上題目條件不同,ybt中:2≤b≤402\le b \le402≤b≤40,OpenJudge中2≤b≤162\le b \le 162≤b≤16
【題目考點】
1. 數制
2. 函數
【解題思路】
數字范圍1~1000000,兩數相乘值超過int類型可以表示的范圍,所以變量要設為long long
某個數字不可能是某些進制下的數字,比如數字278,就不可能是2~8進制的,只能是9進制及以上的數字,因為其中出現了數碼8,只有9進制及以上的進制才有數碼8。
設函數判斷某數字字符串是否可能是某進制下的數字
設函數將某進制字符串轉為值
枚舉所有可能的進制,在進制b下,將p,q,r三個字符串轉為值,看三者的值是否滿足p*q=r,如果滿足,輸出該進制b,程序結束。如果不存在這樣的進制,輸出0。
【題解代碼】
ybt 1413:確定進制
#include<bits/stdc++.h> using namespace std; long long toVal(string s, int b)//字符串s在b進制下轉為值 {long long val = 0;for(int i = 0; i < s.length(); ++i)val = val * b + s[i] - '0';return val; } bool check(string s, int b)//數字s是否可能是b進制下的數字,即各位數字是不是都小于b {for(int i = 0; i < s.length(); ++i)if(s[i] - '0' >= b)return false;return true; } int main() {string s_p, s_q, s_r;long long p, q, r;cin >> s_p >> s_q >> s_r;for(int b = 2; b <= 40; ++b){if(check(s_p, b) && check(s_q, b) && check(s_r, b)){p = toVal(s_p, b);//字符串s_p在b進制下轉為值p q = toVal(s_q, b);//字符串s_q在b進制下轉為值qr = toVal(s_r, b);//字符串s_r在b進制下轉為值rif(p * q == r)//如果滿足乘積關系 {cout << b;return 0;}}}cout << 0;return 0; }OpenJudge NOI 1.13 34:確定進制
OpenJudge NOI 2.1 1973:確定進制
#include<bits/stdc++.h> using namespace std; long long toVal(string s, int b)//字符串s在b進制下轉為值 {long long val = 0;for(int i = 0; i < s.length(); ++i)val = val * b + s[i] - '0';return val; } bool check(string s, int b)//數字s是否可能是b進制下的數字,即各位數字是不是都小于b {for(int i = 0; i < s.length(); ++i)if(s[i] - '0' >= b)return false;return true; } int main() {string s_p, s_q, s_r;long long p, q, r;cin >> s_p >> s_q >> s_r;for(int b = 2; b <= 16; ++b){if(check(s_p, b) && check(s_q, b) && check(s_r, b)){p = toVal(s_p, b);//字符串s_p在b進制下轉為值p q = toVal(s_q, b);//字符串s_q在b進制下轉為值qr = toVal(s_r, b);//字符串s_r在b進制下轉為值rif(p * q == r)//如果滿足乘積關系 {cout << b;return 0;}}}cout << 0;return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1413:确定进制 | OpenJudge NOI 1.13 34:确定进制 | OpenJudge NOI 2.1 1973:确定进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通 1820:【00NOI
- 下一篇: c语言检查密码是否出现回文,C程序检查数