进制转换
题目描述
乐乐正在学进制转换,但他老是搞不清楚到底自己是否做对,请你编一程序实现两种不同进制之间的数据转换,帮他检验。
输入
共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出
仅一行,包含一个正整数,表示转换之后的m进制数。
样例输入
复制样例数据
16
FF
2
样例输出
11111111
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int k(int n,int y)
{
int i=0,kk=1;
for(i=0;i<y;i++)
{
kk=kk*n;
}
return kk;
}
int fun(char a[],int n,int len)
{
int i,x,s=0,y=0;
for(i=len-1;i>=0;i--)
{
if(a[i]>='A'&&a[i]<='F')
{
x=a[i]-'A'+10;
}
else
{
x=a[i]-'0';
}
int kk=k(n,y);
s=s+x*kk;
y++;
}
return s;
}
void fun1(int s,int m)
{
int i,t,x=0;
char a[100];
while(s>0)
{
t=s%m;
s/=m;
if(t==1)
{
a[x++]='1';
}
else if(t==0)
a[x++]='0';
else if(t==2)
a[x++]='2';
else if(t==3)
a[x++]='3';
else if(t==4)
a[x++]='4';
else if(t==5)
a[x++]='5';
else if(t==6)
a[x++]='6';
else if(t==7)
a[x++]='7';
else if(t==8)
a[x++]='8';
else if(t==9)
a[x++]='9';
else if(t==10)
{
a[x++]='A';
}
else if(t==11)
{
a[x++]='B';
}
else if(t==12)
{
a[x++]='C';
}
else if(t==13)
{
a[x++]='D';
}
else if(t==14)
{
a[x++]='E';
}
else if(t==15)
{
a[x++]='F';
}
}
for(i=x-1;i>=0;i--)
{
printf("%c",a[i]);
}
printf("\n");
}
int main()
{
int n,m;
char a[200];
scanf("%d %s %d",&n,a,&m);
int len=strlen(a);
int s=fun(a,n,len);
fun1(s,m);
return 0;
}
不要用pow函数,double型有误差