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;
    }
  • 相关阅读:
    Linux Shell 下的输出重定向
    解决 Scrapy-Redis 空跑问题,链接跑完后自动关闭爬虫
    数据清洗基本概念
    前端常见的跨域请求解决方案
    Pandas模块:表计算与数据分析
    Matplotlib模块:绘图和可视化
    numpy如何使用
    Gerapy 使用详解
    MySQL常见数据库引擎及比较
    基于scrapy-redis组件的分布式爬虫
  • 原文地址:https://www.cnblogs.com/shanxx/p/12848281.html
Copyright © 2011-2022 走看看