日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1413:确定进制 | OpenJudge NOI 1.13 34:确定进制 | OpenJudge NOI 2.1 1973:确定进制

發布時間:2025/3/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 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 \le402b40,OpenJudge中2≤b≤162\le b \le 162b16

【題目考點】

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:确定进制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。