本帖最后由 董月峰 于 2014-3-24 14:44 编辑
/*
9、 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(C语言)
*/
#include<stdio.h>
#include<string.h>
//字符串逆序函数
void change(char *str)
{
char ss[128];
int j = 0;
for (int i = strlen(str)-1; i >= 0; i--)
{
ss[j] = str;
j++;
}
ss[j]='\0'; //结束字符串
strcpy(str, ss);//前面的参数是目标 strcpy(目标,源)
}
//进制转换函数
void trans(int num,int n)
{
if(num==0)
{
printf("0的其它进制也是0");
}
//字符数组16进制版,2和8进制都可以用
char chs[16] = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
char arr[65];
//定义base是与num&的数[2进制就是1,8进制就是7,16进制就是15]
int base = n - 1;
//offset就是num在后面右移的数字
int offset;
if(n == 2)
offset = 1;
else if(n == 8)
offset = 3;
else
offset = 4;
//初始化一个len为0
int len=0;
//为字符串赋值,就是要转换成的进制数倒过来的情况
while(num != 0)
{
//temp=数字与上(进制减一那个数)
int temp = num & base;
//给字符串赋值
arr[++len] = chs[temp];
//2进制右移
num = num >> offset;
}
arr[len+1]='\0';
printf("转换完前为:%s\n",arr);
change(arr);
//不懂为啥输出结果错误,求大神看看算法哪儿出了问题
printf("转换完为:%s\n",arr);
}
int main()
{
int num,n;
printf("请输入一个十进制数字\n");
scanf("%d",&num);
printf("请如实想转换成哪种进制的数【填2,8,16】:\n");
scanf("%d",&n);
trans(num,n);
return 0;
}
/*
请输入一个十进制数字
65
请如实想转换成哪种进制的数【填2,8,16】:
16
转换完前为:\37714
转换完为:41\377
*/ |