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;
    }
    
  • 相关阅读:
    P4995 跳跳!
    P4306 [JSOI2010]连通数
    P1339 [USACO09OCT]热浪Heat Wave
    P2002 消息扩散
    P3388 【模板】割点(割顶)
    P1656 炸铁路
    P2863 [USACO06JAN]牛的舞会The Cow Prom
    P1516 青蛙的约会
    3.从尾到头打印链表
    2.替换空格
  • 原文地址:https://www.cnblogs.com/myblog1993/p/11457596.html
Copyright © 2011-2022 走看看