將m進製的數x轉換為n進製的數輸出。
輸入的第一行包括兩個整數:m和n(2<=m,n<=36)。下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。
輸出x的n進製表示的數。示例1
10 211
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...