• 数制转换


    题目描述:

        求任意两个不同进制非负整数的转换(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 }
    
    
  • 相关阅读:
    第01组 Alpha冲刺(5/6)
    第01组 Alpha冲刺(4/6)
    第01组 Alpha冲刺(3/6)
    第01组 Alpha冲刺(2/6)
    第01组 Alpha冲刺(1/6)
    第01组(17)需求分析报告
    第01组(17)团队展示
    结对编程作业
    Leetcode 每日一题:1014. 最佳观光组合
    Leetcode13. 罗马数字转整数
  • 原文地址:https://www.cnblogs.com/aboutblank/p/2944714.html
Copyright © 2020-2023  润新知