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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 董月峰 于 2014-3-24 14:47 编辑

/*
9、 编程实现将任意的十进制整数转换成任意R进制数(R在2-16之间)。(C语言)
*/

#include<stdio.h>
#include<string.h>



void trans(int num,int n)
{

   
    if(num==0)
    {
        printf("0的其它进制也是0");
    }
    //字符数组16进制版,2和8进制都可以用
    char chs[] = {'0','1','2','3'
        ,'4','5','6','7'
        ,'8','9','A','B'
        ,'C','D','E','F'};
   
    char *arr;
    //定义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)
    {
        int temp = num & base;
        arr[++len] = chs[temp];
        num = num >> offset;
    }
    //此处报错format specifies type ‘char *’but the argument has type ‘int’
    printf("转换完为:%s\n",strrev(strdup(arr)));
}

int main()
{
    int num,n;
    printf("请输入一个十进制数字\n");
    scanf("%d",&num);
    printf("请如实想转换成哪种进制的数【填2,8,16】:\n");
    scanf("%d",&n);
    trans(num,n);
    return 0;
}

2 个回复

正序浏览
        arr[++len] = chs[temp]; // 此处你得arr是一个指针!你的指针没有初始化就是说你的指针根本不知道指向哪里你就向这个指针指向的内存赋值!!这会出大问题!
还有printf("转换完为:%s\n",strrev(strdup(arr)));你这句话完全走网上找到的吧。在xcode上却是确实报错。但是我用cfree不报错。
回复 使用道具 举报
其实这个有简单的思路,进制转换的公式就是 第N位R^(N)
arr[i]=dec%R;//取模最低位一次放在个位十位..
i++;  
dec=dec/R;
你试试这种循环体
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马