zoukankan      html  css  js  c++  java
  • P1143 进制转换

    这个题说的就是给你一个n进制的数,转成m进制,这题相对来说是很简单的,不过我写的代码又臭又长( ̄▽ ̄)"

    我想到的方法是把n进制转为十进制,再将十进制转为m进制

    用样例来解释吧,要将十六进制的FF转为二进制

    先将FF转为十进制,F在十六进制里代表的是15

    个位的F代表15个1

    十位的F代表15个16

    FF的十进制就是15*1+15*16,结果是255

    再将255转为二进制

    对255进行取余,结果是1,再将255/2,结果是127

    对127进行取余,结果是1,再将127/2,结果是63

    对63进行取余,结果是1,再将63/2,结果是31

    ……

    结果是11111111,这样就把FF的二进制求出来了

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    string s;
    int m,n,x=1,a,o[100];
    int main()
    {
        cin>>m;
        cin>>s;
        cin>>n;
        for(int i=s.length()-1;i>=0;i--)//这里注意要倒过来,不然数字就反了
           {
            if(s[i]=='A'){
                a+=10*x;
            }
            else if(s[i]=='B'){
                a+=11*x;
            }
            else if(s[i]=='C'){
                a+=12*x;
            }
            else if(s[i]=='D'){
                a+=13*x;
            }
            else if(s[i]=='E'){
                a+=14*x;
            }
            else if(s[i]=='F'){
                a+=15*x;//十六进制的数会出现字母,这部分就是把字母转换成数字
            }
            else{
                a+=(s[i]-'0')*x;
            }
            x*=m;
        }//这里把n进制转成十进制
        x=0;
        while(a!=0)
        {
            o[x++]=a%n;//要倒这输出,存入数组会简便一些
            a/=n;//这是把十进制转成m进制
        }
        for(int i=x-1;i>=0;i--)
        {
            if(o[i]==10)
            {
                cout<<'A';
            }
            else if(o[i]==11)
            {
                cout<<'B';
            }
            else if(o[i]==12)
            {
                cout<<'C';
            }
            else if(o[i]==13)
            {
                cout<<'D';
            }
            else if(o[i]==14)
            {
                cout<<'E';
            }
            else if(o[i]==15)
            {
                cout<<'F';
            }//如果输出的数是十六进制,就要把数字改为字母输出
            else
            {
                cout<<o[i];
            }
        }
        return 0;
    }

    这样就愉快的AC了(个人意见,不喜勿喷)!

  • 相关阅读:
    重复打印文件首行n次
    考PMP证书总结
    @click @dblclick @keyup 等事件不起作用
    element-ui table 表格内出现一根横线???
    windows 鼠标拖动应用顶部移动 , 向下还原 , 自动最大化的设置
    【.NET】使用 XmlDocument 查找带命名空间的节点
    【WinForms】DataGridView自动调整列宽度以及最后一列宽度填充
    时间返回格式统一处理的几种办法
    hexo使用
    hexo搭建个人博客网站
  • 原文地址:https://www.cnblogs.com/zjylzf/p/12848830.html
Copyright © 2011-2022 走看看