数制转换

题目描述:

    求任意两个不同进制非负整数的转换(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

哎,越写越长...像老太太的裹脚布...不需要用map...一开始用的switch...其实直接判断余数>=10 就直接 num-10+'A' 就可以了..
 1 #include <stdio.h>

 2 #include <cstring>

 3 #include <cctype>

 4 #include <cmath>

 5 #include <algorithm>

 6 #include <map>

 7 using namespace std;

 8 int main()

 9 {

10     int i,a,b,ex,ctoi;

11     typedef map<char,int> char_int;

12     char_int kv;

13     kv['A']=10;

14     kv['B']=11;

15     kv['C']=12;

16     kv['D']=13;

17     kv['E']=14;

18     kv['F']=15;

19     char_int::iterator ikv;

20     char n[200],ans[200];

21     //freopen("in.txt","r",stdin);

22     while (scanf("%d %s %d",&a,n,&b)!=EOF)

23     {

24         i=0;

25         int sum=0;

26         while (n[i])

27         {

28             if (isalpha(n[i]))

29                 n[i]=toupper(n[i]);

30             ++i;    

31         }

32         ex=0;

33         --i;

34         while(i>=0)

35         {

36             char temp=n[i];

37             if (temp>='0'&&temp<='9')

38                 ctoi=temp-'0';

39             else

40                 ctoi=kv[temp];

41             sum+=ctoi*pow(a,ex++);

42             --i;

43         }

44         if (sum==0)

45         {

46             printf("0\n");

47             continue;

48         }

49         i=0;

50         while (sum>0)

51         {

52             ctoi=sum%b;

53             if (ctoi>=10)

54             {

55                 for (ikv=kv.begin();ikv!=kv.end();++ikv)

56                 {

57                     if ((*ikv).second==ctoi){

58                         ans[i++]=(*ikv).first;

59                         break;

60                     }

61                 }

62             }

63             else

64                 ans[i++]=ctoi+'0';

65             sum/=b;

66         }

67         std::reverse(ans,ans+i);

68         ans[i]=0;

69         printf("%s\n",ans);

70     }

71     return 0;

72 }

 

 
   

你可能感兴趣的:(转换)