Flüsse 2021-09-24 10:59 采纳率: 100%
浏览 35
已结题

这个怎么编程,类似的其他进制转换怎么编程

img

  • 写回答

2条回答 默认 最新

  • Naiva 2021-09-24 11:06
    关注
    
    #include <stdio.h>
     
    #define MAXCHAR 101  /*最大允许字符串长度*/
     
    int char_to_num(char ch);  /*返回字符对应的数字*/ 
    char num_to_char(int num);  /*返回数字对应的字符*/
    long source_to_decimal(char temp[], int source);  /*返回由原数转换成的10进制数*/
    int decimal_to_object(char temp[], long decimal_num, int object);  /*返回转换成目标数制后字符数组的长度*/
    void output(char temp[], int length);  /*将字符数组逆序打印*/
     
    int main()
    {
        int source;  /*存储原数制*/
        int object;  /*存储目标数制*/
        int length;  /*存储转换成目标数制后字符数组的长度*/
        long decimal_num;  /*存储转换成的10进制数*/
        char temp[MAXCHAR];  /*存储待转换的数值和转换后的数值*/
        int flag = 1;  /*存储是否退出程序的标志*/
        while(flag)  /*利用输入的flag值控制循环是否结束*/
        {
            printf("转换前的数是:");
            scanf("%s", temp);
            printf("转换前的数制是:");
            scanf("%d", &source);
            printf("转换后的数制是:");
            scanf("%d", &object);
            printf("转换后的数是:");
            decimal_num = source_to_decimal(temp, source);
            length = decimal_to_object(temp, decimal_num, object);
            output(temp, length);
            printf("继续请输入1,否则输入0:\n");
            scanf("%d", &flag);
        }
     
        return 0;
    }
    /*将字符转换成数字*/
    int char_to_num(char ch)
    {
        if(ch>='0' && ch<='9')
            return ch-'0';  /*将数字字符转换成数字*/
        else
            return ch-'A'+10;  /*将字母字符转换成数字*/
    }
    char num_to_char(int num)
    {
        if(num>=0 && num<=9)
            return (char)('0'+num-0);  /*将0~9之间的数字转换成字符*/
        else
            return (char)('A'+num-10);  /*将大于10的数字转换成字符*/
    }
    long source_to_decimal(char temp[], int source)
    {
        long decimal_num = 0;  /*存储展开之后的和*/
        int length;
        int i;
        for( i=0; temp[i]!='\0'; i++ );
        length=i;
        for( i=0; i<=length-1; i++ )  /*累加*/
            decimal_num = (decimal_num*source) + char_to_num(temp[i]);
        return decimal_num;
    }
    int decimal_to_object(char temp[], long decimal_num, int object)
    {
        int i=0;
        while(decimal_num)
        {
            temp[i] = num_to_char(decimal_num % object);  /*求出余数并转换为字符*/
            decimal_num = decimal_num / object;  /*用十进制数除以基数*/
            i++;
        }
        temp[i]='\0';
        return i;
    }
    void output(char temp[], int length)
    {
        int i;
        for( i=length-1; i>=0; i--)  /*输出temp数组中的值*/
            printf("%c", temp[i]);
        printf("\n");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 创建了问题 9月24日

悬赏问题

  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥20 win11无法启动 持续蓝屏且系统还原失败,无法开启系统保护
  • ¥15 哪个tomcat中startup一直一闪而过 找不出问题
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码