鱼C论坛

 找回密码
 立即注册
查看: 1790|回复: 10

[已解决]十进制转化为任意进制

[复制链接]
发表于 2021-11-17 21:11:59 | 显示全部楼层 |阅读模式

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

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

x
今天老师给我们一个五级项目,要求十进制转化为任意进制,转化进制和数字由用户输入,并且用最简练的c语言,有没有哪位大神教一下啊
~~~~~球球了
最佳答案
2021-11-17 21:52:50
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print(int num, int base){
    static char res[9];
    res[0] = '\0';
    switch(base){
        case 2:
            for (size_t i = 128; i > 0; i >>= 1) strcat(res, ((num & i) == i) ? "1" : "0");
            printf("0b%s\n", res);
            break;
        case 8:
            printf("0o%o\n", num);
            break;
        case 16:
            printf("0x%x\n", num);
            break;
    }
}

int main()
{
    int num = 67; // 样例
    
    /*一般十进制能转化成二进制(Binary)、八进制(Octal)和十六进制(Hexadecimal)三种*/
    print(num, 2);
    print(num, 8);
    print(num, 16);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-17 21:29:43 | 显示全部楼层
        任意进制,这也太没谱了吧,你问一下你们老师,128 进制行不行?如果行的话,请他写个代码让大家学学。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
人造人 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-11-17 21:33:15 | 显示全部楼层
jackz007 发表于 2021-11-17 21:29
任意进制,这也太没谱了吧,你问一下你们老师,1234 进制行不行?如果行的话,请他写个代码让大家 ...

真的就离谱,原话是这样的:用户根据需要输入十进制数和目标数制然后程序运行后输出该十进制数转为目标数制的结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-17 21:33:51 | 显示全部楼层
jackz007 发表于 2021-11-17 21:29
任意进制,这也太没谱了吧,你问一下你们老师,128 进制行不行?如果行的话,请他写个代码让大家学 ...

真的就一点都不理解 一点头绪都没有。我太难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 21:43:30 | 显示全部楼层
执迷不悟0527 发表于 2021-11-17 21:33
真的就一点都不理解 一点头绪都没有。我太难了

你们老师出的这题有问题
题目中没有说明 目标数制的取值范围
那问题就来了,能转128进制吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 21:47:17 | 显示全部楼层
这就离谱。。。我感觉发现新大陆。。。是我太菜了,兄弟加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 21:52:45 | 显示全部楼层
//模拟十进制579转成8进制

public class Main {
    public static void main(String []args){
        int B =579;//需转换的数
        int D =8;  //基数
        int temp[]=new int[100];
        int i=0;
        //十进制到任意进制,这个数对基数依次取余,倒序输出,在之前正序输出最后一个商
        while (B/D!=0){
            temp[i]=B%D;
            B=B/D;
            i++;
        }
        System.out.print(B);//输出第一个商

        for(int j=i-1;j>=0;j--)
            System.out.print(temp[j]);//倒数输出余数
    }
}

兄弟,我也是才开始学的,这个玩意是我复制的,你试试呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 21:52:50 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void print(int num, int base){
    static char res[9];
    res[0] = '\0';
    switch(base){
        case 2:
            for (size_t i = 128; i > 0; i >>= 1) strcat(res, ((num & i) == i) ? "1" : "0");
            printf("0b%s\n", res);
            break;
        case 8:
            printf("0o%o\n", num);
            break;
        case 16:
            printf("0x%x\n", num);
            break;
    }
}

int main()
{
    int num = 67; // 样例
    
    /*一般十进制能转化成二进制(Binary)、八进制(Octal)和十六进制(Hexadecimal)三种*/
    print(num, 2);
    print(num, 8);
    print(num, 16);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-17 22:20:00 | 显示全部楼层
本帖最后由 rt3 于 2021-11-17 22:38 编辑

如果你正在用Windows, itoa这个函数了解下。
但是目前我没装Win, 就不献丑了
Linux下对应的可以 将结果存储为 字符串的函数 是sprintf,但是整个代码也不会太简洁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 09:33:58 | 显示全部楼层
詹伟艺 发表于 2021-11-17 21:52
//模拟十进制579转成8进制

public class Main {

我试试看熬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-18 09:35:02 | 显示全部楼层
詹伟艺 发表于 2021-11-17 21:47
这就离谱。。。我感觉发现新大陆。。。是我太菜了,兄弟加油

我真的裂开了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 01:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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