A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 董月峰 于 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
*/

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
//测试指针字符串赋值

#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
*/
回复 使用道具 举报
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



自己把错误找出了求版主加分
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马