#include<stdio.h>
#include<string.h>
int decimal(char x[100],int m,int leng)
{
int i,temp,sum=0,flag;
for(i=0;i<leng;i++)
{
if(x[i]>='0'&&x[i]<='9')
temp=(x[i]-'0');
else if(x[i]>='A'&&x[i]<='Z')//Z的界限,就是进制基数的上限
temp=(x[i]-'A'+1);
else
flag=1;//用来标记输出是否输入合法
sum=sum*m+temp;//很重要,第一次就算错了
}
return sum;
}
void numberTransform(int sum,int n)//十进制数转为n进制数,利用相除取余的算法(让计算机能理解)?
{
int i,j,a[100];
for(i=0;i<100;i++)
a[i]=-1;
i=0;
do{
a[i]=sum%n;
i++;
sum=sum/n;
}while(sum!=0);
// for(j=0;j<i;j++)//用来测试a【】的数组
// printf("%d\n",a[j]);
i--;
while(i>=0)
{
if(a[i]<10)
printf("%d",a[i]);
else
printf("%c",a[i]+55);
i--;
}
}
int main()
{
int m,n,sum,leng;
char x[100],*p;
printf("请输入要转换的数值:\n");
scanf("%s",x);
p=x;
printf("请输入该数值的基数:\n");
scanf("%d",&m);
printf("请输入转换的基数:\n");
scanf("%d",&n);
leng=strlen(x);
sum=decimal(p,m,leng);
// printf("%d",sum);
numberTransform(sum,n);
return 0;
}
网友评论