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)。
    
    样例输入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;
    }
    
  • 相关阅读:
    linux kill命令以及 信号
    rhel7 系统服务——unit(单元)
    redis集群在线迁移
    二、主目录 Makefile 分析(3)
    二、主目录 Makefile 分析(2)
    二、主目录 Makefile 分析(1)
    一、文档目录分析
    Linux下解压缩
    设备树
    轮询
  • 原文地址:https://www.cnblogs.com/myblog1993/p/11457596.html
Copyright © 2011-2022 走看看