|
題目描述
求任意兩個(gè)不同進(jìn)制非負(fù)整數(shù)的轉(zhuǎn)換(2進(jìn)制~16進(jìn)制),所給整數(shù)在long所能表達(dá)的范圍之內(nèi)。
不同進(jìn)制的表示符號(hào)為(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F(xiàn))。
輸入
輸入只有一行,包含三個(gè)整數(shù)a,n,b。a表示其后的n 是a進(jìn)制整數(shù),b表示欲將a進(jìn)制整數(shù)n轉(zhuǎn)換成b進(jìn)制整數(shù)。a,b是十進(jìn)制整數(shù),2 =< a,b <= 16。
輸出
可能有多組測(cè)試數(shù)據(jù),對(duì)于每組數(shù)據(jù),輸出包含一行,該行有一個(gè)整數(shù)為轉(zhuǎn)換后的b進(jìn)制數(shù)。輸出時(shí)字母符號(hào)全部用大寫表示,即(0,1,...,9,A,B,...,F(xiàn))。
樣例輸入
樣例輸出
提示 [+]
*** 提示已隱藏,點(diǎn)擊上方 [+] 可顯示 ***
來(lái)源
【思路】


- /*********************************
- * 日期:2013-2-19
- * 作者:SJF0115
- * 題號(hào): 天勤OJ 題目1130: 數(shù)制轉(zhuǎn)換
- * 來(lái)源:http:///problem.php?id=1130
- * 結(jié)果:AC
- * 來(lái)源:2008年北京大學(xué)圖形實(shí)驗(yàn)室計(jì)算機(jī)研究生機(jī)試真題
- * 總結(jié):
- **********************************/
- #include <string.h>
- #include <stdio.h>
-
- char str[1001];
- char ans[1001];
- /*
- * 轉(zhuǎn)換為十進(jìn)制
- * str是a進(jìn)制數(shù)字
- */
- long long int ToD(int a){
- int c,len,i;
- long long int sum,w;
- len = strlen(str);
- //轉(zhuǎn)換為十進(jìn)制的數(shù)字
- sum = 0;
- //權(quán)值
- w = 1;
- //從低位到高位遍歷每一個(gè)數(shù)字
- for(i = len-1;i >= 0;i--){
- //0 - 9
- if(str[i] >= '0' && str[i] <= '9'){
- c = str[i] - '0';
- }
- //A - F
- else if(str[i] >= 'A' && str[i] <= 'F'){
- c = str[i] - 'A' + 10;
- }
- //a - f
- else{
- c = str[i] - 'a' + 10;
- }
- //累加該位數(shù)字和該位數(shù)字的權(quán)值的積
- sum += c * w;
- //進(jìn)制權(quán)值
- w *= a;
- }
- return sum;
- }
- /*
- * 十進(jìn)制數(shù)字num轉(zhuǎn)換為b進(jìn)制數(shù)字,并用ans存儲(chǔ)
- */
- int ToAny(long long int num,int b){
- int index = 0,c;
- do{
- //計(jì)算該位數(shù)字
- c = num % b;
- //將數(shù)字轉(zhuǎn)換為字符
- ans[index++] = (c < 10) ? (c + '0') : (c - 10 + 'A') ;
- num /= b;
- }while(num);
- return index;
- }
- int main()
- {
- long long int c;
- int len,a,b,i;
- while(scanf("%d %s %d",&a,str,&b) != EOF){
- //轉(zhuǎn)換為十進(jìn)制
- c = ToD(a);
- //轉(zhuǎn)換為b進(jìn)制
- len = ToAny(c,b);
- //輸出
- for(i = len-1;i >= 0;i--){
- printf("%c",ans[i]);
- }
- printf("\n");
- }
- return 0;
- }
|