进制转换C语言
来源:互联网 发布:淘宝店铺数据分析报表 编辑:程序博客网 时间:2024/05/16 17:13
给定一个M进制的数x,实现对x向任意的一个非M进制的数转换。
分析:
二进制、八进制、十六进制向十进制转换:按权展开相加;十进制转换成二进制、八进制、十六进制:整数部分除以基数取余数(取余的方向为从后向前);小数部分乘以基数取整数(取整的方向为从前向后)。
- 将输入或存储的字符转换为对应的数字,我们可以分两类进行考虑。
第一类是介于’0’到’9’之间的字符,转换成相应的数字0~9时,可利用其ASCII码之间的
对应关系。字符’0’的ASCII码为48,’1’的ASCII码为49,’1’-‘0’=1得到的差即为字符
ch对应的数字。第二类是介于”A’到’Z’之间的字符,字符’A’对应的数字为10,’B’对应
的数字为11,对于此类字符可以利用公式ch-‘A’+10得到对应的数字 - 同理,数字转换为对应字符时也分
两种情况,一种是0~9之间的数字,只需用字符’0’的ASCII码加上相应的数值,然后进行强制类型转换将其
转换成字符型即可;另一种是大于等于10的数值,同样利用对应的ASCII码加上此时的数值与10的差即可,即
‘A’+num-10。
#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,int object);//转换后新数输出void output(char temp[],int length); void 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>=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; 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; 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
- C语言-进制转换
- C语言 进制转换
- C语言进制转换
- 进制转换C语言
- c语言中的进制转换
- 2-36进制转换 C语言
- C语言中的各种进制转换
- 用C语言实现进制转换
- IOS之C语言进制转换
- 4.c语言的进制转换
- C语言实现进制转换
- C语言习题5.18--进制转换
- C语言基础 进制的转换
- 第十二周:C语言:进制转换
- 第十四周:C语言:进制转换
- c语言(进制转换)
- hdu2031 进制转换(C语言)
- c 语言 进制转换 短小精悍
- 字符串的getBytes方法
- java加密的方式
- chrome 查看 post 请求 _xrfs 参数
- VC6.0 cannot find the definition (implementation) of this function解决方法
- Android Greendao+多线程断点续传(方法一)
- 进制转换C语言
- 基于STC89c52单片机实现8*8led心跳效果
- SpringBoot学习6之Logback日志导入mongodb
- android开发之为客户端建立反馈服务器
- python3抽样方式(两种)
- 51nod 1051 最大子矩阵和
- Python数据分析之pandas学习(含盖8个方面)
- 不要熬夜了
- 整理了一下学的文件(不知道对不对,请大神指导)