先输入一个数x,输入一个数n;分别表示将十进制x,转换成n进制(2<=n<=16),且该进制最大位数小于10000
例如
5 2
-564645 16
输出
101
-89DA5
#include"stdio.h"
int hexa (int t, int n)
{
if(t<0)
{
printf("-");
t=-t;
}//判断输入的数是否为负值,若为负值则转换成正值
int i,m=0,s=0;
char a[10000]={'0'};
char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
if(t!=0){
for(i=0;t>=1;i++)
{
s=t%n;
a[i]=b[s];
t=t/n;
m++;
}
for(i=m-1;i>=0;i--)
{
printf("%c",a[i]);
}
}//逆序输出
else
printf("0");
return 0;
}
int main()
{
int x,n;
scanf("%d%d",&x,&n);
hexa(x,n);
return 0;
}
因为是由字符串储存的,所以称为伪转换
多行输入,以0 0结束
#include"stdio.h"
int hexa (int t, int n)
{
int v=0;
if(t<0)
{
t=-t;
v=1;
}
if(v==1)
{
printf("-");
}
int i,m=0,s=0;
char a[10000]={'0'};
char b[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
if(t!=0)
{
for(i=0;t>=1;i++)
{
s=t%n;
a[i]=b[s];
t=t/n;
m++;
}
for(i=m-1;i>=0;i--)
{
printf("%c",a[i]);
}
}
else
printf("0");
return 0;
}
int main()
{
int x,n,sum=0;
int i=0;
int a[2][100]={0};
while(scanf("%d%d",&x,&n))
{
if(x!=0||n!=0)
{
a[0][i]=x;
a[1][i]=n;
sum++;
i++;
}
else
break;
}
for(i=0;i<sum;i++)
{
hexa(a[0][i],a[1][i]);
if(i<sum-1)
{
printf("\n");
}
/* printf("%d %d\n",a[0][i],a[1][i]);*/
}
return 0;
}