• 算法题----任意进制转换


    /*
    求任意两个不同进制非负整数的转换(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)。
    
    样例输入4 10 123
    样例输出27
     */
    #include <bits/stdc++.h>
    #include <cstring>
    using namespace std;
    
    int toInt(char x)
    {
        if(x >= '0' && x <= '9') return x - '0';
        else if( x >= 'a' && x <= 'z') return x - 'a' + 10;
        else return x - 'A' + 10;
    }
    
    
    char toChar(int x)
    {
        if( x>=0 && x<=9) return '0' + x;
        else return 'A' + x - 10;
    }
    
    int main()
    {
         int a, b;  // a为原进制 b要转换的进制
         char s[50];
    
         while((scanf("%d%d%s", &a,&b,s)) != EOF)
    //     scanf("%d%d%s", &a,&b,s);
         {
             int product = 1;  // 进制的幂
             int y = 0;  //存十进制,中间转换
             for(int i = strlen(s) - 1; i>= 0; i--)
             {
                 y += toInt(s[i]) * product;
                 product = product * a;
             }
    
             char ans[100];
             int num = 0;
    
             do{
                 ans[num++] = toChar(y % b);
                 y = y / b;
             }while(y!=0);
    
             for(int i = strlen(ans) - 1; i >= 0; i--)
             {
                 printf("%c", ans[i]);
             }
             printf("
    ");
         }
    
         return 0;
    }
    
  • 相关阅读:
    20、【Linux系统编程】 exec系列函数
    3、【Linux网络编程】socket实例
    c++ 二分答案(基础应用)
    c++ 迷宫搜索(宽搜)
    c++ 广度优先搜索(宽搜)
    栈的概念
    c++ 栈的基本应用
    队列的概念
    c++ 队列的基本应用
    Knight Moves
  • 原文地址:https://www.cnblogs.com/myblog1993/p/11457596.html
Copyright © 2020-2023  润新知