C语言趣味编程100例——数制转换

    xiaoxiao2021-12-14  19

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

    2.基本概念:

           基数:用一组固定的数字来表示数的大小,这组固定的数字的个数就称为该计数制的基数;

    eg:十进制的基数是10;二进制的基数是2

           权:每一个数位都有一个固定的基值与之对应,称为权;对于一个M进制的数来说,小数点左边各位上对应的权值从右到左分别为基数的0次方,基数的1次方,对于小数点右边各位上对应的权值从左到右分别为基数的-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,intobject);

    void output(char temp[],int length);

     

    main ()

    {

       intsource,object,length;

       long decimal_num;

       char temp[MAXCHAR];

       int flag=1;

      

       while(flag)

       { 

        printf("before convert number:");

        scanf("%s",temp);

        printf("shuzhi:");

        scanf("%d",&source);

        printf("convert shuzhi:");

        scanf("%d",&object);

        printf("output number:");

        

        decimal_num=source_to_decimal(temp,source);

        length=decimal_to_object(temp,decimal_num,object);

        printf("%d\n",length);

        output(temp,length);

        printf("continue:1 ",length);

        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>=0&&num<=9)

        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,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,intobject)

    {

      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");

    }

     

    转载请注明原文地址: https://ju.6miu.com/read-965760.html

    最新回复(0)