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

    题目描述

    请你编一程序实现两种不同进制之间的数据转换。

    输入格式

    共三行,第一行是一个正整数,表示需要转换的数的进制&n(2≤n≤16)&,第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2m16)。

    输出格式

    一个正整数,表示转换之后的mm进制数。

    输入输出样例

    输入 #1
    16
    FF
    2
    
    输出 #1
    11111111


    题目大意:

    给你一个N进制的数,让你转换成M进制的数。

    分析思路:

    用N进制转M进制会很麻烦,我们先把N进制的数转换成10进制的数,再把转换成10

    进制的数转换成M进制。利用十进制过度一下。

    CODE:

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<map>
    using namespace std;//头文件 
    long long n,m;
    string s;
    long long len,he,sum,zs=1;
    long long mod,cd;
    long long a[101000];
    int main(){
        cin>>n;
        cin>>s;
        cin>>m;
        len=s.length();
        //把N进制数转换为十进制
        for(int i=len-1;i>=0;i--){ 
            if(s[i]>='0'&&s[i]<='9'){//求出是s[i]所代表的数字 
                he=s[i]-'0';
            }
            if(s[i]>='A'&&s[i]<='Z'){
                he=s[i]-'A'+10;
            }
            sum+=he*zs;//把每一位的十进制数累加 
            zs*=n; 
        }
        //把转换成的十进制数转换为M进制 
        while(sum!=0){
            mod=sum%m;//取模 
            sum/=m;
            cd++;
            a[cd]=mod;//求出每一位的余数 
        }
        for(int i=cd;i>=1;i--){//倒序输出 
            if(a[i]>=10){
                cout<<char(a[i]+55);
            }
            else{
                cout<<a[i];
            }
        }
        return 0;
    }
  • 相关阅读:
    OpenRisc-52-run openrisc&orpmon on ml501 board
    PHP之APC缓存详细介绍(转)
    ios 使用GCD 多线程 教程
    poj2454
    尝鲜delphi开发android/ios_环境搭建
    HDU 3308 线段树 最长连续上升子序列 单点更新 区间查询
    jQuery 表格排序插件 Tablesorter 使用
    Oracle 常见错误
    安卓开发44:解决 INSTALL_FAILED_UID_CHANGED 等问题
    Java的native方法
  • 原文地址:https://www.cnblogs.com/shanxx/p/12848281.html
Copyright © 2011-2022 走看看