九度oj-進位制轉換
阿新 • • 發佈:2019-02-04
題目描述:
求任意兩個不同進位制非負整數的轉換(2進位制~16進位制),所給整數在long所能表達的不同進位制的表示符號為(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
輸入:
輸入只有一行,包含三個整數a,n,b。a表示其後的n 是a進位制整數,b表示欲將a進位制整數n轉換成b進位制整數。a,b是十進位制整數,2 =< a,b <= 16。資料可能存在包含前導零的情況。
輸出:
可能有多組測試資料,對於每組資料,輸出包含一行,該行有一個整數為轉換後的b進位制數。輸出時字母符號全部用大寫表示,即(0,1,...,9,A,B,...,F)
樣例輸入:
15 Aab3 7
樣例輸出:
210306
解題思路:
首先先把n進位制轉化為10進位制,然後再把10進位制轉化為m進位制。注意將10進位制轉成m進位制的時候,10進位制數本身為0的情況。
//完成二進位制到十六進位制之間的相互轉換 # include<stdio.h> # include<string.h> # include<math.h> char symbol[]={'A','B','C','D','E','F'}; int main() { int n,m,i; char str[50]; while(scanf("%d",&n)!=EOF) { scanf("%s%d",str,&m); char ans[50]; int sum=0,index=0; int len=strlen(str); //首先將m進位制轉換為10進位制 for(i=0;i<len;i++) { if(str[i]>='a'&&str[i]<='z') str[i]=str[i]+'A'-'a'; if(str[i]>='A'&&str[i]<='Z')//轉成十進位制 sum+=(str[i]-'A'+10)*pow(n,len-i-1);//字元轉化為數字 else sum+=(str[i]-'0'+0)*pow(n,len-i-1);//字元轉化為數字 } //其次將10進位制轉換為n進位制 do { if(sum%m>=10) ans[index++]=symbol[sum%m-10]; else ans[index++]=sum%m+'0';//數字轉化為字元 sum/=m; }while(sum!=0);//防止sum本身為0這種情況 for(i=index-1;i>=0;i--) printf("%c",ans[i]); printf("\n"); } return 0; }