清華考研複試上機 進製轉換

2021-08-14 16:05:01 字數 1123 閱讀 5721

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

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

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

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

輸入時字母部分為大寫,輸出時為小寫,並且有大資料。

示例1

16 10

f

15
思路:這個題難就難在有「大資料」需要轉換。所謂大資料,就是即使使用long long型別也無法儲存的資料,也許會有幾十上百位。這道題實質上是大數字除法的問題。乙個大數字除以乙個小數字(36以內),其餘數較小(36以內),商較大。因此被除數和商使用字串儲存,除數和餘數使用int變數儲存。

過程如下,若干次迴圈直到x變為0,每次以x除以n:具體過程模擬手工除法,從被除數的最高位開始,每次商當前餘數的m倍與該位之和整型除以n,其餘數即下次迴圈的餘數。x除以n的餘數即為輸出的從低到高的下一位。知道迴圈結束,然後將所得結果倒序輸出。

**如下:

#include #include #include #include char instr[2][1000];//輸入的m進製數

char outstr[1000];//輸出的n進製數

char val(int x) // get the char from integer value

else if(x <= 35 && x >= 10)

printf("error1\n");

return 0;

}int key(char x) // get the integer form char value

else if(x <= 'z' && x >= 'a')

else if(x <= 'z' && x >= 'a')

return 0;

}bool iszero(char* str, int len)

int main()

flag = 1 - flag;

outstr[j++] = val(remain);

}j--;

while(j >= 0)

printf("\n");

}}

清華考研複試上機 10進製 VS 2進製

對於乙個十進位制數a,將a轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數b,我們乘b為a的二進位制逆序數。例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進位制逆序數。乙個1000位 即10 999 以內的...

清華考研複試上機 N的階乘

輸入乙個正整數n,輸出n的階乘。正整數n 0 n 1000 輸入可能包括多組資料,對於每一組輸入資料,輸出n的階乘示例1 4 515 24 1201307674368000思路 1000的階乘肯定是超過long long不知道多少位的。所以這道題只能用字串來處理。好在這道題要實現的乘法是乙個大整數乘...

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

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