首页 > 其他分享 >数制转换

数制转换

时间:2023-05-05 19:34:42浏览次数:38  
标签:转换 temp int decimal char source num 数制

一、问题描述:

给定一个M进制的数x,实现对x向任意的一个非M进制的数的转换

二、问题分析:
掌握不同数制间的转换关系是解决问题的关键,这里所说的数制一般包括二进制、八进制、十六进制及十进制。除了不同的数制还有下面几个必须要了解的概念。基数:在一种数制中,只能使用一组固定的数字来表示数的大小。这组固定的数字的个数就称为该计数制的基数(Base)。如十进制的基数为10,二进制的基数为2等。权:又称为位权或权值,即每一个数位都有一个固定的基值与之相对应,称之为权。如十进制的个位对应的权值为 1(10,十位对应的权值为 10(10),百位对应的权值为100(102),对于一个 M 进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方、基数的1次方、基数的2 次方等,对于小数点右边各位上对应的权值从左到
右分别为基数的-1 次方、基数的-2 次方等。二进制、八进制、十六进制向十进制转换:按权展开相加。十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。二进制、八进制、十六进制相互转换:先转换成十进制再转换成其他进制:或者按照其对应关系进行转换(三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数)。本题按照前一种转换方式进行编程。

三、代码实现

#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);
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;
    char temp[MAXCHAR];
    int flag=1;
    while(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);

    }
}
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<=9&&num>=0)
        return (char)('0'+num-0);
    else
        return  (char)('A'+num-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--)
            printf("%c",temp[i]);
        printf("\n");
    }

 

标签:转换,temp,int,decimal,char,source,num,数制
From: https://www.cnblogs.com/jais/p/17375165.html

相关文章

  • 如何通过C#/VB.NET代码将PowerPoint转换为HTML
    利用PowerPoint可以很方便的呈现多媒体信息,且信息形式多媒体化,表现力强。但难免在某些情况下我们会需要将PowerPoint转换为HTML格式。因为HTML文档能独立于各种操作系统平台(如Unix,Windows等)。并且它可以加入图片、声音、动画、影视等内容,还能从一个文件跳转到另一个文件,与世界各地......
  • Swift下Data处理全流程:从网络下载,数模转换,本地缓存到页面使用
    Swift下将网络返回json数据转换成struct假如网络请求返回的数据结构是一个深层嵌套的Json首先要通过key-value取出这个json中的数据源//将返回的json字符串转Dictoryletjson="""{"name":"jack","age":20,"description":"Astudent."......
  • 该方法实现网页编码的自动识别和转换
    """该方法实现网页编码的自动识别和转换"""#python第三方库chardet不可靠,把gbk编码解析成Windows-1254@retry(stop_max_attempt_number=5,wait_random_min=2000,wait_random_max=20000,)defpage_trancode(content):codes=chardet.detect(content)ifcodes[&......
  • 记录一件很神奇的类型转换问题(springboot项目+echarts)
    今天博主在应付学校的实验,想要使用echarts绘制一张很简单的条形图(博主是初学者),如下(时间还未作排序) 对于横轴,我封装了一个dateList,这个datelist是用java,将数据库中date类型的数据,提取其年月拼装而成的,代码如下:Stringdate=String.valueOf(art.getArticleCreateTime().getYea......
  • GUID转换成16位、19位、22位唯一字符串
    ///<summary>///依据GUID获取16位的唯一字符串///<paramname=\"guid\"></param>///<returns></returns>publicstaticstringGuidTo16String(){longi=1;......
  • 普朗克定律不同表达形式之间的转换
    分谱辐射亮度是辐射亮度对波长的一阶导数,普朗克定律描述了分谱辐射亮度与温度和发射电磁波波长之间的关系。由于波长也可以由波数、频率来间接表示,我们见到的普朗克定律可以有如下三种不同的表达形式。下面的推导公式常用于不同单位的分谱辐射亮度之间的转换。一、以波长为参数的......
  • 无法将“Autodesk.autocad.livepreview.previewruleprovider”的对象强制转换为类型“
    具体问题如下图所示:在vs2010中调试中,会调用CAD2014,这时就会出现上述的问题错误;经查找,具体的问题是因为:cad的dll引用中,“复制本地”设置为True,因更改为false;这里要注意的是,每个项目中的引用都要更改为false,如Hello项目和InitAndOpt项目中的引用,都要为false,否则这个错误一直会出......
  • asm_second 题解(坐标转换+二维偏序)
    QuestionAsm.Def在第一象限内找到了n个可疑点。他需要为导弹规划路径。如图所示,导弹一开始在(0,0)。它只能朝着一定的方向——即严格夹在图中两条射线间的方向(白色部分)前进。注意,它不能沿着这两条射线前进,当然也不能停在原地。当导弹到达某个可疑点后,它仍然只能朝着该范围内......
  • ffmpeg转换视频编码
    下载ffmpeg官网下载压缩包。关键的是三个exe使用ffmpegcmd进入到三个exe的存放路径下,或者把三个exe的存放路径添加到系统路径。输入指令ffmpeg-ioriginal_video.mp4-vfscale=640:360result_video.mp4-hide_banner640*360可以修改成想要的尺寸。python使用ffmpypi......
  • 将ansible的输出转换为JSON格式
    第一步找到ansible.cfg我的ansible.cfg的文件在/etc/ansible文件夹的下面。可以使用Linux命令行进行切换到这个文件夹下面。cd/etc/ansible第二步,修改ansible.cfg文件,在配置文件中添加以下的配置。[defaults]stdout_callback=jsonbin_ansible_callbacks=True ......