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

    我们通过例题来了解进制的转换

    例题

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

    思路

    先将任意进制数转换为十进制数(乘)再由十进制数转换为任意进制数(除),不要忘记输出是A~F的特别处理。

    代码

    #include<iostream>
    #include<string>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int main()
    {
        int m, n;
        string c;
        long long num=0;
        cin >> m >> c >> n;
        for (int i = 0; i < c.length(); i++)
        {
            if (islower(c[i]))  num += (c[i] - 'a' + 10) * pow(m, c.length() - 1 - i); //如果是字母的话就+10,因为a代表10
            else if (isupper(c[i])) num += (c[i] - 'A' + 10)*pow(m, c.length() - 1 - i);
            else if (isdigit(c[i]))num += (c[i] - '0')*pow(m, c.length() - 1 - i);//如果是数字就直接乘
        }
        int out[100];
        int s = 0;
        while (num > 0)
        {
            out[s++] = num%n;
            num /= n;
        }
        if (n <= 9)//将变为的进制<=9
        {
            for (int i = s - 1; i >= 0; i--)
                cout << out[i];
        }
        else
        {
            for (int i = s - 1; i >= 0; i--)
            {
                if (out[i] >= 10)cout << (out[i] - 10 + 'A');
                else cout << out[i];
            }
        }
    }

    例题二

    https://www.luogu.com.cn/problem/P1017(负数的进制转换)

    题目分析

    如果余数为负数,余数减去进制数,商加1

    代码

    #include<iostream>
    using namespace std;
    int main()
    {
        int a, b;
        std::ios::sync_with_stdio(false);
        std::cin.tie(0);
        std::cout.tie(0);
        cin >> a >> b;
        char list[300];
        int cnt = 0;
        int aa = a;
        while (a!=0)
        {
            int k = a%b;
            a = a / b;
            if (k < 0) { k -= b; a += 1; }
            if (k < 10)list[cnt++] = k + '0';
            else
                list[cnt++] = k - 10 + 'A';
        }
        cout << aa << "=";
        for (int i = cnt - 1; i >= 0; i--)
            cout << list[i];
        cout << "(base" << b << ")";
    }
  • 相关阅读:
    LinQ&EF任我行(一)LinQ to SQL (转)
    WPF数据模板和控件模板
    Sql优化
    SQL锁表语句
    js动态创建dom
    js实现等待n秒后按钮可用
    js关于事件冒泡
    工作流学习(个人总结)
    sql常用函数
    将Datatable序列化为Json对象返回到客户端
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12859922.html
Copyright © 2011-2022 走看看