C语言编程练习题_03进制转换
题目来源于网络,代码使用GCC编译运行通过。
输入一个十进制数N,将它转换成R进制输出
注:如果R进制大于10 可使用类似16进制的表示方法表示。
如10 = A ;11 = B ; 12 + C等
代码如下
#include <stdio.h>
/*
* 思路: 1. 十进制数N 转换为R进制,只需要对R取余操作。
* 2. 当 R > 10 时,需要另作判断,使 10 = A
* 3. 可能存在N < 0 的情况,因此,需要额外做出判断
*/
char JZZH(int N,const int R,char* Result,int *Length)
{
char SymFlag = 0;
char temp = 0;
char i = 0;
//1. 判断十进制数N是否是负数,若是,置标志为有效
if( N < 0 )
{
N = -N;
SymFlag = 1;
}
while( N )
{
if((N%R) <= 9)
{
Result[i] = N % R + '0';
}
else if((N%R) >= 10)
{
Result[i] = N%R - 10 + 'A';
}
i++;
N /= R;
}
*Length = i;
/*顺序翻转*/
for(i=0;i<*Length/2;i++)
{
temp = Result[i];
Result[i] = Result[*Length - i -1];
Result[*Length - i -1] = temp;
}
return SymFlag;
}
int main()
{
int N = 0,R = 0,i = 0;
char Symflag = 0;
char Result[50]={0};
int Length = 0;
printf("\r\n Please Input N and R !\r\n " );
scanf("%d%d",&N,&R);
Symflag = JZZH(N,R,&Result[1],&Length);
if(Symflag)Result[0]='-';
printf("\r\nResult is ");
for(i=0;i<=Length;i++)
{
printf("%c",Result[i]);
}
printf("\r\n");
}