onlinejudge 支付宝扫一扫天天领红包!
问题 B: 数制转换
时间限制: 1 Sec 内存限制: 32 MB
提交: 609 解决: 164
[提交][状态][讨论版][命题人:外部导入]
题目描述
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入
输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。
输出
可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
样例输入
<span style="color:#333333">4 123 10</span>
样例输出
<span style="color:#333333">27</span>
提示
代码
#include <iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
class student{
public: char xuehao[100];
char name[100];
char sex[1000];
int age;
};
using namespace std;
int f(int n){
int result;
if(n==1||n==2)
{
result=1;
return result;
}
else
result=f(n-1)+f(n-2);
return result;
}
void reverse1(char s[],char s1[]){
int i=0;
int j=0;
for(;s[i]!='\0';i++)
if((s[i]=='a')||(s[i]=='o')||(s[i]=='e')||(s[i]=='i')||(s[i]=='u')){
s1[j]=s[i];
j++;
}
}
int main()
{long a,b;
char n[100];
char c[100000];
while(cin>>a>>n>>b){
memset(c,'0',sizeof(c));
long long sum=0;
for(int i=0;n[i]!='\0';i++){
if(n[i] >= 'a')
n[i] -= 32;
int tmp = (n[i] >= 'A' ? n[i]-'A'+10:n[i]-'0');
sum=sum*a+tmp;
/*if(n[i]>='A')
sum=sum*a+(n[i]-55);
else
sum=sum*a+(n[i]-'0');*/}
int k=0;
do{
if(sum%b<=9)
c[k] = sum%b+'0';
else
c[k] = sum%b-10+'A';
sum=sum/b;
k++;
}while(sum!=0);
for(int i=k-1;i>=0;i--)
cout<<c[i];
cout<<endl;
}
}
//
用字符串存储和表示不同进制的数。