鱼C论坛

 找回密码
 立即注册
查看: 726|回复: 5

[已解决]进制转换

[复制链接]
发表于 2024-4-17 13:22:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
十进制到2,8,16进制的转换
#include<stdio.h>
void Decimal_conversion (int x, int y)
{
        if(x>0)
        {
                Decimal_conversion(x/y,y);
                if(x%y<10)
                        printf("%d",x%y);
                else
                {
                        switch(x%y)
                        {
                        case 10:
                                printf("A");
                        case 11:
                                printf("B");
                        case 12:
                                printf("C");
                        case 13:
                                printf("D");
                        case 14:
                                printf("E");
                        case 15:
                                printf("F");
                        }
                }
        }
}
int main()
{
        int x, y;
        scanf("%d%d",&x, &y);
        Decimal_conversion(x,y);
        return 0;
}



最佳答案
2024-9-2 19:10:15
按你的方法,case没有break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-17 13:23:04 | 显示全部楼层
小伙子,进制转换是个常见的问题,我来解释一下。

首先,我们先来看看十进制到二进制的转换吧。
#include <stdio.h>

void DecimalToBinary(int decimal) {
    if (decimal == 0) { // 如果十进制数为0,则直接输出0
        printf("0");
        return;
    }
    
    int binary[32]; // 创建一个数组来存放二进制位
    int currentIndex = 0; // 记录当前二进制位的索引
    
    while (decimal > 0) {
        binary[currentIndex++] = decimal % 2; // 取余数作为当前位的值
        decimal /= 2; // 更新十进制数为除以2的结果
    }
    
    // 倒序输出数组中的元素,即得到二进制数
    for (int i = currentIndex - 1; i >= 0; i--) {
        printf("%d", binary[i]);
    }
}

int main() {
    int decimal;
    printf("请输入一个十进制数:");
    scanf("%d", &decimal);
    printf("转换成二进制为:");
    DecimalToBinary(decimal);
    printf("\n");
    
    return 0;
}

好了,现在我们来看看十进制到八进制的转换。
#include <stdio.h>

void DecimalToOctal(int decimal) {
    if (decimal == 0) { // 如果十进制数为0,则直接输出0
        printf("0");
        return;
    }
    
    int octal[32]; // 创建一个数组来存放八进制位
    int currentIndex = 0; // 记录当前八进制位的索引
    
    while (decimal > 0) {
        octal[currentIndex++] = decimal % 8; // 取余数作为当前位的值
        decimal /= 8; // 更新十进制数为除以8的结果
    }
    
    // 倒序输出数组中的元素,即得到八进制数
    for (int i = currentIndex - 1; i >= 0; i--) {
        printf("%d", octal[i]);
    }
}

int main() {
    int decimal;
    printf("请输入一个十进制数:");
    scanf("%d", &decimal);
    printf("转换成八进制为:");
    DecimalToOctal(decimal);
    printf("\n");
    
    return 0;
}

最后,我们再来看看十进制到十六进制的转换。
#include <stdio.h>

void DecimalToHexadecimal(int decimal) {
    if (decimal == 0) { // 如果十进制数为0,则直接输出0
        printf("0");
        return;
    }
    
    char hexadecimal[32]; // 创建一个数组来存放十六进制位
    int currentIndex = 0; // 记录当前十六进制位的索引
    
    while (decimal > 0) {
        int remainder = decimal % 16; // 取余数作为当前位的值
        if (remainder < 10) {
            hexadecimal[currentIndex++] = remainder + '0'; // 如果余数小于10,转换为对应的字符
        } else {
            hexadecimal[currentIndex++] = remainder - 10 + 'A'; // 如果余数大于等于10,转换为对应的字符
        }
        decimal /= 16; // 更新十进制数为除以16的结果
    }
    
    // 倒序输出数组中的元素,即得到十六进制数
    for (int i = currentIndex - 1; i >= 0; i--) {
        printf("%c", hexadecimal[i]);
    }
}

int main() {
    int decimal;
    printf("请输入一个十进制数:");
    scanf("%d", &decimal);
    printf("转换成十六进制为:");
    DecimalToHexadecimal(decimal);
    printf("\n");
    
    return 0;
}

希望这些代码能帮助到你,有问题随时问哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:24:45 | 显示全部楼层
FishC 发表于 2024-4-17 13:23
小伙子,进制转换是个常见的问题,我来解释一下。

首先,我们先来看看十进制到二进制的转换吧。

你咋知道对方的年龄和性别
称呼错了  多尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:24:52 | 显示全部楼层
wp231957 发表于 2024-04-17 15:24
你咋知道对方的年龄和性别
称呼错了  多尴尬


非常抱歉,我没有办法知道对方的具体年龄和性别。作为一个计算机程序,我只是根据您提供的问题和信息进行回答。如果我犯了错误,请您谅解,并告诉我正确的信息,我会尽力改正。有任何其他问题,请随时告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-17 15:34:49 | 显示全部楼层
本帖最后由 jackz007 于 2024-4-17 15:40 编辑
#include <stdio.h>
#include <string.h>

const char c[][18] = {"0123456789abcdef" , \
                     "0123456789ABCDEF"}                                                        ;

/* 十进制整型数 d 转换为 x 进制字符串 s,x : 2 ~ 16 */
char * dec2x(char s[] , int d , int x)
{
        int i , k , n                                                                           ;
        strcpy(s , "-1")                                                                        ;
        if(x >= 2 && x <= 16) {
                for(n = 0 , k = d ; k ; k /= x , n ++)                                          ;
                for(i = 0 , k = d , s[n] = '\0' ; k ; k /= x , i ++) s[n - i - 1] = c[0][k % x] ; 
        } 
        return s                                                                                ;
}

/* x 进制字符串 s 转换为十进制整型数,x : 2 ~ 16 */
int x2dec(char s[] , int x)
{
        int d , k , n                                                                           ;
        d = -1                                                                                  ;
        if(x >= 2 && x <= 16) {
                for(d = n = 0 ; s[n] ; n ++) {
                        for(k = 0 ; c[0][k] != s[n] && c[1][k] != s[n] ; k ++)                  ;
                        if(c[0][k] == s[n] || c[1][k] == s[n]) {
                                d = d * x + k                                                   ;
                        } else {
                                d = -1                                                          ;
                                break                                                           ;
                        }                
                }
        }
        return d                                                                                ;
}

int main(void)
{
        char s[16][256]                                                                         ;
        int d = 8193                                                                            ;
        printf("  十进制:%d\n" , d)                                                            ;
        printf("  二进制:%s\n" , dec2x(s[0] , d , 2))                                          ; // 以二进制显示十进制数   8193
        printf("  八进制:%s\n" , dec2x(s[1] , d , 8))                                          ; // 以八进制显示十进制数   8193
        printf("十六进制:%s\n" , dec2x(s[2] , d , 16))                                         ; // 以十六进制显示十进制数 8193
        printf("  十进制:%d\n" , x2dec(s[0] , 2))                                              ; // 把二进制字符串转换回十进制数显示
        printf("  十进制:%d\n" , x2dec(s[1] , 8))                                              ; // 把八进制字符串转换回十进制数显示
        printf("  十进制:%d\n" , x2dec(s[2] , 16))                                             ; // 把十六进制字符串转换回十进制数显示
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-2 19:10:15 | 显示全部楼层    本楼为最佳答案   
按你的方法,case没有break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表