清華複試機試之進製轉換2

2021-10-02 11:46:11 字數 1100 閱讀 6991

將m進製的數x轉換為n進製的數輸出。

輸入的第一行包括兩個整數:m和n(2<=m,n<=36)。

下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。

輸出x的n進製表示的數。
示例1

10 2

11

1011
注意輸入時如有字母,則字母為大寫,輸出時如有字母,則字母為小寫。
本題中的m、n範圍是2~36,顯然是用了超過十進位制的用26個字母表示,因此最多是到36進製,而二進位製到十進位制中間各種進製的轉換,只是涉及到0~9數字之間的排列,但是十一進製到三十六進製制之間,則會出現26個字母,因此需要區分看待。

本題中可以通過十進位製作為中間過渡,實現m到十進位制轉換,十進位製到n進製的轉換

總結:本題在做時只能想到最簡單易懂的方法,按照部分功能測試成功後,最後將程式跑成功,發現其實其中進製轉換的四個函式分為兩組中,**的重複度較大,還沒想出來如何去優化,請大神不吝指教;

在提交過程中發下只有66%的通過率,其中  36 9  資料會發生錯誤,仔細觀察嘗試後發現可能是函式down or up轉十進位制的函式中的result可能會產生溢位,並將其相關變數改為long long 型予以解決

完全是個人想法作為筆記來用,謝謝

後附有牛客上的oj 

#include#include#include#includeusing namespace std;

//中間用十進位制的過渡

long long downtoten(string str,int m)

return result;

}void tentodown(long long ten,int n)

for(j=i-1;j>=0;j--)

cout<=10)

else a[i]=t+'0'; //不是26個字母的

ten=ten/n;

i++;

}for(j=i-1;j>=0;j--) //逆序輸出

cout<>str;

long long t;

if(m>=2&&m<=10)

}else

}}

清華大學考研複試機試 進製轉換2

將m進製的數x轉換為n進製的數輸出。輸入的第一行包括兩個整數 m和n 2 m,n 36 下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。輸出x的n進製表示的數。10 2 111011輸入時如有字母,則字母為大寫,輸出時如有字母,則字母為小寫。這道題其實和10進製...

清華大學考研複試機試 進製轉換

將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 每行輸出對應的二進位制數。此題為大數轉換問題,通過模擬手工計算過程來實現。清華大學的考研複試機試經常為考察大整數問題...

王道複試機試(2)

學號姓名排名 用sort函式 include include include using namespace std struct student student arr 100 bool compare student x,student y else return x.score int mai...