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

来源:互联网 发布:做淘宝美工工资高吗 编辑:程序博客网 时间:2024/05/17 21:57

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

}

 

0 0
原创粉丝点击