將m進製的數x轉換為n進製的數輸出。
輸入的第一行包括兩個整數:m和n(2<=m,n<=36)。下面的一行輸入乙個數x,x是m進製的數,現在要求你將m進製的數x轉換成n進製的數輸出。
輸出x的n進製表示的數。示例1輸入時字母部分為大寫,輸出時為小寫,並且有大資料。
16 10f
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的整數 每行輸出對應的二進位制數。此題為大數轉換問題,通過模擬手工計算過程來實現。清華大學的考研複試機試經常為考察大整數問題...