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


    小赵常常觉得时间不够用。在学习操作系统和计算机组成原理等课程的时候,经常遇到2进制8进制16进制等需要转换成10进制来方便计算,然后有需要再转换成相应的进制。小赵想不如我来做一个进制转换的程序,非常好做,又可以节省时间。

    作为小赵的好朋友,请你来帮他做这件事。

    输入

    本题有多组测试数据,处理到文件结束。

    每组数据首先是两个数字n,m。n代表输入数字的进制,m代表输出数字的进制。(2<=n,m<=62)

    接下来一行是一个字符串,表示n进制下的数字。字符串保证表示的值在C语言64位整型(即long long int)范围内。字符串由0~9,a~z,A~Z组成。

    a~z标志10到35,A~Z标志36到61。

    输出

            每组数据输出一行,用一个字符串表示的转换为m进制之后的值。

    样例输入 Copy

    10 16
    10
    10 62
    62

    样例输出 Copy

    a
    10

    题目大意:就是说给你n进制下的一个字符串转换到m进制
     简单模拟,可以先转为10进制,再由10进制转为m进制。
     坑点:数字0(10 10 0)(就是任意进制下的0,转换到任意进制都是0)
     AC代码
    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
    typedef long long ll;
    const int maxn = 1e6+10;
    char a[maxn];
    char b[maxn];
    int main()
    {
        ll n,m,k;
        char pp='0';
        while(~scanf("%lld%lld",&n,&m)){
            scanf("%s",a);
            ll l=strlen(a);
            if(strcmp(a,"0")==0){
                printf("%c
    ",pp);
                continue;
            }
            ll sum=0;//输入转化后 
            ll j=0;
            ll p;
            for(int i=l-1;i>=0;i--){
                if(a[i]>='a'&&a[i]<='z'){
                    p=a[i]-'a'+10;
                }
                else if(a[i]>='A'&&a[i]<='Z'){
                    p=a[i]-'A'+36;
                }
                else{
                    p=a[i]-'0';
                }
                sum+=p*pow(n,j);
                j++;
            }
            ll y=0;
            while(sum){
                ll x=sum%m;
                if(x<10){
                    b[y++]=(x+'0');
                }
                else if(x>=10&&x<=35){
                    b[y++]=(x-10+'a');
                }
                else if(x>=36&&x<=61){
                    b[y++]=(x-36+'A');
                }
                sum/=m;
            }
            for(int i=y-1;i>=0;i--){//注意b数组逆序输出 
                printf("%c",b[i]);
            } 
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    web前端面试题
    Delphi控制摄像头
    表达式计算
    web services基础知识二
    soap和web services
    IdTCPClient和IdTCPServer主要属性
    工控控件组iocomp的iplot控件的使用
    编译开关
    delphi web services控件组
    將FastReport存入數據庫,讀出并更新
  • 原文地址:https://www.cnblogs.com/lipu123/p/12159174.html
Copyright © 2011-2022 走看看