题目描述
查看题目信息
在一次NOIP初赛模拟考试中,小明碰到了一道进制转换的题,由于没有学过进制转换,导致成绩不太理想,于是他下决心搞明白进制转换是怎么回事。
通过查阅资料他发现,进制有很多种,常用的有二进制、八进制、十进制和十六进制等,如果不超过十进制,0到9的十个数字就够用了,但超过十进制时,两位数字需要用一个字符去表示,通常用大写字母A表示十进制中的10,用大写字母B表示十进制中的11,用大写字母C表示十进制中的12,以此类推,用大写字母F表示十进制中的15,用大写字母G表示十进制中的16等等。
现在他想编写一个程序,将一个任意的n进制数转换成m进制的数。
输入格式
第一行仅有一个正整数n(1≤n≤16),表示给定数是一个n进制数。
第二行是一个字符串,描述了一个合法的n进制数。
第三行仅有一个正整数m(1≤m≤16),表示要将给定的n进制数转换成m进制数。
注意:所给的n进制数在其对应的10进制数中大小不会超过10^9。
输出格式
输出文件仅有一行,输出转换成m进制的数。
样例输入
2
101101
10
样例输出
45
样例输入
7
654321
8
样例输出
337315
#include<bits/stdc++.h> using namespace std; int main() { ?? ?int n,m,shi=0,e=1; ?? ?int a[1010]; ?? ?string s; ?? ?cin>>n>>s>>m; ?? ?int len=s.length(); ?? ?for(int i=len-1;i>=0;i--) ?? ?{ ?? ??? ?if(s[i]>='A'&&s[i]<='F') ?? ??? ??? ?s[i]=int(s[i]=55)+'0'; ?? ??? ?shi=shi+(s[i]-'0')*e; ?? ??? ?e=e*n; ?? ? } ?? ?int i=0; ?? ?while(shi>0) ?? ?{ ?? ??? ?a[i]=shi%m; ?? ??? ?shi=shi/m; ?? ??? ?i++; ?? ?} ?? ?for(int j=i-1;j>=0;j--) ?? ?{ ?? ??? ?if(a[j]>=10) ?? ??? ?{ ?? ??? ??? ?cout<<char(a[j]+55);? ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?cout<<a[j]; ?? ??? ?} ?? ?} ?? ?return 0; } 老样子,来个赞,3连;
?
?
?
?
|