PAT1010 Radix(進製轉換)

2021-09-12 21:29:49 字數 1813 閱讀 5345

分析:給定一對正整數,例如6和110,這個等式6 = 110是否為真?答案是「是」,如果6是十進位制數,110是二進位制數的話。現在對於任意一對正整數n1和n2,你的任務是找到乙個數字的進製,而另乙個數字的進製是給定的。

分析:修改了一下,現在是24/25

(1)首先確定讓你判斷的數的進製,它的下限應該是自身每一位最大值再加1,比如2d34,那麼進製的下限就應該是d+1也就是14.這個數進製的上限就是另外乙個數的大小。

(2)然後二分這個區間[mi

nrad

ix,m

axra

dix]

[minradix,maxradix]

[minra

dix,

maxr

adix

],判斷這兩個數是否相等。

(3)注意:範圍可能非常的大,開unsigned long long

#include

using namespace std;

typedef

unsigned

long

long ull;

string s1,s2;

ull n1,n2,tag,radix;

ull tran

(string s,ull q)

else

if(s[i]

>=

'a'&&s[i]

<=

'z')

}return tmp;

}void

solve

(string s,ull num)

else

if(s[i]

>=

'a'&&s[i]

<=

'z')

lowradix=

max(x,lowradix);}

lowradix++

;//得到這個數的進製下限

maxradix=num;

//得到這個數的上限,就是另外的那個數

ull l=lowradix;

ull r=maxradix;

ull mid=-1

;while

(l<=r)

elseif(

tran

(s,mid)

>num)

else}if

(!flag) cout<<

"impossible"

}int

main()

else

return0;

}

得分10/25,明天補。

#include

using namespace std;

string s1,s2;

int n1,n2,tag,radix;

inttran

(string s,

int q)

else

if(s[i]

>=

'a'&&s[i]

<=

'z')

}return tmp;

}void

solve

(string s,

int num)}if

(cur>10)

if(!flag) cout<<

"impossible"

}int

main()

else

return0;

}

每天一道PAT 1010 Radix

直接暴力列舉,有乙個測試點會超時。有兩個錯誤一直沒找到,應該是有模糊的邊界條件沒考慮到。超時解決辦法 二分查詢 include include include include using namespace std vectornum1,num2 int main 數字一 char num 2 11...

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轉換的時候進行判...