生活随笔
收集整理的這篇文章主要介紹了
01:数制转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
01:數制轉換
總時間限制:?
1000ms內存限制:?
65536kB描述
求任意兩個不同進制非負整數的轉換(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 來源
2005~2006醫學部計算概論期末考試 1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4 #include<cstring>
5 using namespace std;
6 char a[10001];
7 int b[10001];
8 int now;
9 int tot;
10 int n;//未被轉化的進制
11 int m;//需要轉換的進制
12 int da[10001];
13 char w[20]={'A','B','C','D','E','F'};
14 int main()
15 {
16 cin>>n;
17 scanf("%s",&a);
18
19 cin>>m;
20 int l=strlen(a);
21 if(a[0]=='0'&&l==1)
22 {
23 cout<<"0";
24 return 0;
25 }
26 for(int i=0;i<l;i++)
27 {
28 if(a[i]>=97&&a[i]<=122)
29 {
30 a[i]=a[i]-32;
31 }
32 if(a[i]>=49&&a[i]<=57)
33 {
34 b[i]=a[i]-48;
35 }
36 else if(a[i]>=65&&a[i]<=90)
37 {
38 b[i]=a[i]-55;
39 }
40 }
41 int ans=0;
42 int now=0;
43 for(int i=l-1;i>=0;i--)
44 {
45 ans=ans+b[i]*(pow(n,now));
46 now++;
47 }
48 int now2=1;
49 while(ans!=0)
50 {
51 int r=ans%m;
52 b[now2]=r;
53 ans=ans/m;
54 now2++;
55 }
56 for(int i=now2-1;i>=1;i--)
57 {
58 if(b[i]<10)
59 cout<<b[i];
60 else
61 {
62 int k=b[i]-10;
63 cout<<w[k];
64 }
65 }
66 /*for(int i=now2;i>=0;i--)
67 cout<<da[i];*/
68 return 0;
69 } 要注意考慮a是0的情況
總結
以上是生活随笔為你收集整理的01:数制转换的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。