黑马程序员技术交流社区
标题:
进制转换算法问题:求教算法错误的地方
[打印本页]
作者:
董月峰
时间:
2014-3-19 08:50
标题:
进制转换算法问题:求教算法错误的地方
本帖最后由 董月峰 于 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
*/
作者:
董月峰
时间:
2014-3-19 17:55
//测试指针字符串赋值
#import <Foundation/Foundation.h>
#include<string.h>
void change(char *str)
{
char ss[64];
int j = 0;
for (int i = strlen(str)-1; i >= 0; i--)
{
ss[j] = str[i];
j++;
}
ss[j]='\0'; //结束字符串
strcpy(str, ss);//前面的参数是目标 strcpy(目标,源)
}
int main(int argc, const char * argv[])
{
char s[1024];
char a[3]={'2','5','a'};
s[0] = a[0];
s[1] = a[1];
s[2] = a[2];
s[3] = '\0';
printf("%s\n",s);
printf("%d\n",strlen(s));
printf("%d\n",sizeof(s));
change(s);
printf("%s\n",s);
return 0;
}
/*
25a
3
1024
a52
Program ended with exit code: 0
*/
作者:
董月峰
时间:
2014-3-20 12:58
while(num != 0)
{
//temp=数字与上(进制减一那个数)
int temp = num & base;
//给字符串赋值此处++len改为len++
arr[++len] = chs[temp];
//2进制右移
num = num >> offset;
}
arr[len+1]='\0';
//此处len+1改len
自己把错误找出了求版主加分
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2