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

数制转换

时间:2023-04-25 23:02:45浏览次数:26  
标签:转换 temp int decimal char source num 数制

1,问题描述:

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

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

3.源代码:

#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/tianpeisen/p/17354268.html

相关文章

  • (隐式)自动类型转换
    #include<stdio.h>intmain(){chara[6]="Hello";longl=1;printf("sizeof(*a+0)=%dsizeof(*a+l)=%d\n",sizeof(*a+0),sizeof(*a+l));printf("(*a+0)=%c(*a+l)=%c\n",(*a+0),(*a+l));}ViewCode 自动类......
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换
    场景Java+GeoTools(开源的JavaGIS工具包)快速入门-实现读取shp文件并显示:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130367852在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。比如说将EPSG:4524的坐标系转换成EPSG:2334的坐标系......
  • Base64 编码的字符串转换为 Blob 对象方法
    constblob=function(data:string,mime:string){data=data.split(',')[1];data=window.atob(data);letia=newUint8Array(data.length);for(vari=0;i<data.length;i++){ia[i]=data.charCodeAt(i);};returnnew......
  • Python中的时间格式的读取与转换(time模块)
    一、时间的表示格式在Python中,表示时间的格式有4种较为常用,分别是浮点数格式、标准可读格式、格式化格式以及自定义格式。(名字是自己起的,非官方命名)(1)浮点数格式用一个float格式的浮点数表示时间,其具体含义表示为从世界标准纪元时间(1970年1月1日)起算至该时间节点的秒数。(2)标准......
  • 一篇文章教会你如何将DOM转换为virtual DOM
    【一、VirtualDOM简介】VirtualDOM是虚拟节点,它通过Javascript的Object对象模拟DOM中的节点,然后通过特定的render方法将其渲染成真实的DOM节点。浏览器在处理DOM时,总会附加很多属性,这会使得每一次数据更新,渲染很慢。VirtualDOM利用Javascript做了中间层,Javascript记录状态,将每......
  • ts中interface转换class
    引在ts中interface可以表示具体的一种数据结构,但当我们需要将interface转换成class时,直接使用interface的话,会导致一些问题,比如interface中的属性无法被继承,所以我们需要将interface转换成class,这里介绍一种方法。例数据结构interfaceIPerson{name:strin......
  • HJ95 人民币转换
    思路:人民币转换规则较多,需要根据要求和测试调整判断语句。已知转换可分为4位数一组,且每四位数转换规则一致。考虑迭代方法。迭代如何缩小规模,字符串切片方法。字符串每次切片四位,需要一个跟踪参数,因此使用while循环,c作为跟踪参数。代码中c最大为3,最高可实现12位数字转换,需要实......
  • MFC-ScreenToClient屏幕坐标转换为客户区坐标
     win32APIPOINTpoint={20,50};HWNDhWnd=GetSafeHwnd();BOOLb=::ScreenToClient(hWnd,&point);//屏幕坐标转换为客户区坐标/*参数1:HWNDhWnd窗口句柄参数2:LPPOINTlpPoint屏幕坐标点函数成功后,保......
  • kettle从入门到精通 第十六课 kettle 映射 (子转换)02
    1、上节讲的子映射里面只有一个转换(类似一个java类里面只有一个公共方法),本次讲解的有两个,实际上可以有任意多个(一个java类里面有多个公共方法)。两个转换分别计算x+y和x*y。 2、命名参数:定义一些变量传递到子转换里面。 3、输入1)Availableinputs可以点击加号增加多个输入,......
  • [C#]中String、String[]、List<string>相互转换及string成员substring、split简单使用
    一、相互转换1.String>String[]Strings="a,b,c,d,e";String[]sArray=s.Split(',');2.String[]>Stringstring[]sArray={"a","b","c","d","e"};strings=String.Join(",......