确定进制(信息学奥赛一本通-T1413)
生活随笔
收集整理的這篇文章主要介紹了
确定进制(信息学奥赛一本通-T1413)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目描述】
6*9=42 對(duì)于十進(jìn)制來(lái)說(shuō)是錯(cuò)誤的,但是對(duì)于 13 進(jìn)制來(lái)說(shuō)是正確的。即 6(13)*9(13)=42(13),而 42(13)=4*131+2*130=54(10)。
你的任務(wù)是寫一段程序,讀入三個(gè)整數(shù) p、q和 r,然后確定一個(gè)進(jìn)制 B(2≤B≤40) 使得 p*q=r。如果 B 有很多選擇, 輸出最小的一個(gè)。
例如:p=11, q=11, r=121.則有11(3)*11(3)=121(3)因?yàn)?11(3)=1*31+1*30=4(10)和121(3)=1*32+2*31+1*30=16(10)。對(duì)于進(jìn)制 10,同樣有11(10)* 11(10)= 121(10)。這種情況下,應(yīng)該輸出 3。如果沒(méi)有合適的進(jìn)制,則輸出 0。
【輸入】
一行,包含三個(gè)整數(shù)p、q、r。 p、q、r的所有位都是數(shù)字,并且1 ≤ p、q、r ≤ 1,000,000。
【輸出】
一個(gè)整數(shù):即使得p*q=r成立的最小的B。如果沒(méi)有合適的B,則輸出0。
【輸入樣例】
6 9 42
【輸出樣例】
13
【源程序】
#include<iostream> using namespace std; int judge(int x,int B);int main() {int a,b,c;int i;cin>>a>>b>>c;for(i=2; i<=40; i++) //枚舉2-40進(jìn)制if(judge(a,i)*judge(b,i)==judge(c,i))//找到使a*b=c成立的最小進(jìn)制B{cout<<i<<endl;return 0;}cout<<0<<endl;return 0; }int judge(int x,int B) {int value=1,num=0;while(x!=0)//將一個(gè)數(shù)化為B進(jìn)制數(shù){if((x%10)>=B)//B進(jìn)制下不可能出現(xiàn)大于等于B的數(shù)位return 99999;num+=((x%10)*value);value*=B;x/=10;}return num; }?
總結(jié)
以上是生活随笔為你收集整理的确定进制(信息学奥赛一本通-T1413)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息学奥赛C++语言: 队伍调整
- 下一篇: 素数个数(信息学奥赛一本通-T1151)