P1143 进制转换
Posted shanxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1143 进制转换相关的知识,希望对你有一定的参考价值。
题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制&n(2≤n≤16)&,第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的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; }
以上是关于P1143 进制转换的主要内容,如果未能解决你的问题,请参考以下文章