由乙個數的進製求另乙個數的進製使這兩個數在10進製的時候相等
注意:1.進製有可能會很大,因此兩個數轉化為10進製時都要使用longlong儲存
2.因為進製的範圍很廣不止2-36,因此要用二分查詢 範圍是這個字串裡的最大字元+1到給出進製的數的十進位制值+1,且要注意查詢時轉化為十進位制數後還有可能溢位,要判斷溢位時進製再往下取的情況
#include#include#includeusing namespace std;
int main()
if(isdigit(max))
r=max-'0'+1;
else
r=max-'a'+10+1;
long long high=sum+1;
long long low =r;
for(j=(high+low)/2;low<=high;j=(high+low)/2)
else if(sum1=0;i--)
if(isdigit(s2[i]))
sum+=pow(radix,s2.size()-1-i)*(s2[i]-'0');
else
sum+=pow(radix,s2.size()-1-i)*(s2[i]-'a'+10);
char max='0';
int r;
for(i=0;imax)
max=s1[i];
}if(isdigit(max))
r=max-'0'+1;
else
r=max-'a'+10+1;
long long high=sum+1;
long long low =r;
for(j=(high+low)/2;low<=high;j=(high+low)/2)
else if(sum1else if(sum1==sum)
}if(flag==1)
printf("impossible");
else
cout<}
}}
PAT1010 Radix(進製轉換)
分析 給定一對正整數,例如6和110,這個等式6 110是否為真?答案是 是 如果6是十進位制數,110是二進位制數的話。現在對於任意一對正整數n1和n2,你的任務是找到乙個數字的進製,而另乙個數字的進製是給定的。分析 修改了一下,現在是24 25。1 首先確定讓你判斷的數的進製,它的下限應該是自身...
1010 Radix 進製轉換(有坑)
思路 這題有坑啊 1 z表示36並不意味著只到36進製,最小2進製,最大進製 另乙個數的值 2 可能會超時,用二分 3 用long long!在二分過程中會溢位,所以要特判,當溢位時說明書過大,right mid 1 如下 include include include include includ...
PAT A1010 Radix 膜!演算法筆記題解
這道題是有點坑的,題意表述上沒有明確,radix的值並不在 0,36 之間,所以暴力遍歷是行不通的。反正也不會o o 看了下演算法筆記關於這道題的題解,根據題解中所述,假定已知的radix都是n1的 若不是則交換 則轉換為10進製後n1不會超過long long 的範圍,故僅需對n2轉換的時候進行判...