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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*题目要求:把任意十进制的数转换成2-16之间任意进制的数

内心想法:以前这个真心没做过,感觉不大会。我是零基础,c语言看的不是很多,而且也是之前看的,都快忘了。现在主要在看oc。但是我可以尝试编写一个转换成二进制的试试。
1、一开始真的只是尝试写了二进制,也遇到一些问题,比如最后数组倒着打印时,如何添加判断条件。
2、实现零二进制的转换,我发现只要添加一个R,就可以随意转换成任意进制。
3、但是后来又发现问题,超过十进制的需要字母ABCDEF等,又添加了switch语句。
4、后来打印又出现问题,添加判断语句,数字打印数字,字母打印字母。好在最后都完成了,还是有点小开心。
*/


#import <stdio.h>

int main()
{
    int two[16] = {0};    // 先建立一个数组,16位够用了。
    int ten = 0;          // 用来获取十进制等数字
    int R = 0;            // 改成R进制
    int div = 1;          // 这个是除数的商,先赋值个1,因为后面的循环需要判断大与0
   
    printf("请输入十进制整数\n");
   
    scanf("%d", &ten);    //获取十进制数字
   
    printf("请输入想要转换成几进制(介于2-16之间):\n");
   
    scanf("%d", &R);      //获取改成几进制
   
    for (int i = 0; div > 0; i++)
    {
        div = ten / R;       // 这里是求商
        two[i] = ten % R;    // 这里是求余数
        ten = div;           // 把商再次赋值给被除数
        
        if (two[i]>=10)      // 因为超过十进制的需要转换成字母,所以加了个switch语句
        {
            switch (two[i])
            {
                case 10:
                    two[i] = 'A';
                    break;
                case 11:
                    two[i] = 'B';
                    break;
                case 12:
                    two[i] = 'C';
                    break;
                case 13:
                    two[i] = 'D';
                    break;
                case 14:
                    two[i] = 'E';
                    break;
                case 15:
                    two[i] = 'F';
                default:
                    break;
            }
        }
    }
   
   
    printf("转换成%d进制的结果是:\n",R);
    int m = 0;     // 这个是为了判断第一个不是0的元素(一开始脑昏,把这句写到循环里,总不对...)
    for (k = 15; k >= 0; k--)
    {
        if (m == 0 && (two[k] != 0) )   // 碰到第一个非0元素,让m=1,可以进行下面的语句
        {
            m = 1;
        }
        
        if (m == 1)
        {
            if (two[k] >= 0 && two[k] <= 9)   // 这是为了应对超过十进制的,输出数字和字母
            {
                printf("%d",two[k]);
            }
            else
                printf("%c",two[k]);
        }
        
    }
   
    printf("\n");   // 因为Xcode输出最后总有句话,加个换行,方便看结果。
   
    return 0;
}

评分

参与人数 1技术分 +2 收起 理由
Micro + 2 很给力!

查看全部评分

5 个回复

倒序浏览
因为是黑苹果,不能上网,只好通过txt格式复制到windos笔记本,再上传,所以格式可能比较难看,大家见谅~~
回复 使用道具 举报
思路很清晰啊,不断求余数,余数保留,商继续求余...做题目这么快,挺厉害的
回复 使用道具 举报
whymerain 发表于 2015-3-18 17:01
思路很清晰啊,不断求余数,余数保留,商继续求余...做题目这么快,挺厉害的 ...

不断求余数的思想我之前接触过,嘿嘿。只不过过了一个月忘了,这次仔细一分析就做出来了
回复 使用道具 举报
  1. #include <string.h>
  2. void strrev(char *str){
  3.     size_t len = strlen(str);
  4.     for (int i=0; i<strlen(str)/2; i++) {
  5.         char temp = str[i];
  6.         str[i]=str[len-i-1];
  7.         str[len-i-1]=temp;
  8.     }
  9. }
复制代码



字符 转换的方法。给你参考一下
回复 使用道具 举报
这么厉害,这是学了多久呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马