【笔记】【C语言】任意进制之间的转换(支持小数部分)
整理一下,免得自己忘记,也希望能帮到有需要的人。
————————————————————————我是一条华丽的分割线————————————————————————
全局变量:双精度浮点数p、字符数组out。
当其他进制转换成十进制时,将转换结果存储在浮点数p中;当十进制转换成其他进制时,将结果以字符串的形式存放在字符数组out中。
转换过程分为整数部分和小数部分,整数部分转换后需逆序输出,而小数部分顺序输出。
例如:
Conversion(num,8,10);
表示将num字符串数组所对应的一个八进制数转换成一个十进制数。
直接上代码
1 int Conversion(char num[20], int t, int n) 2 { 3 int i,ii,j,k,m,x,b[30],h[30],c; 4 double d,r; 5 ii=0; 6 p=0; 7 memset(out,0,20); 8 m=strlen(num);//求字符串的长度 9 x=m; 10 for(k=0,j=0;k<m;k++)//主要是分段,以小数点为界限,只转换整数部分 11 { 12 if(num[k]=='.') 13 { 14 x=k; 15 break; 16 } 17 } 18 19 for(j=x-1;j>=0;j--) 20 { 21 if(num[j]=='-') break; //符号的处理 22 if(num[j]=='A') r=10; 23 else if(num[j]=='B') 24 r=11; 25 else if(num[j]=='C') 26 r=12; 27 else if(num[j]=='D') 28 r=13; 29 else if(num[j]=='E') 30 r=14; 31 else if(num[j]=='F') 32 r=15; 33 else 34 r=num[j]-'0';//将字符转换成数字 35 p=p+r*(pow ((double)t,(double)(x-j-1)));//计算结果 36 } 37 38 if(num[x]=='.') 39 { 40 for(j=x+1;j<m;j++) 41 { 42 if(num[j]=='A') r=10; 43 else if(num[j]=='B') 44 r=11; 45 else if(num[j]=='C') 46 r=12; 47 else if(num[j]=='D') 48 r=13; 49 else if(num[j]=='E') 50 r=14; 51 else if(num[j]=='F') 52 r=15; 53 else 54 r=num[j]-'0';//将字符转换成数字 55 p=p+r*(pow ((double)t, (double)(x-j))); 56 } 57 } 58 //g_print("%f",p); 59 if(n==10)//如果要转换成十进制 60 { 61 if(num[0]=='-') 62 { 63 p=-p; 64 } 65 return 0; 66 } 67 68 else //如果要转换成其他进制 69 { 70 k=(int)p; 71 i=0; 72 while(k)//判定需要转换的数是否变为0 73 { 74 h[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反 75 k/=n;//转换一位之后进行相应的变化 76 } 77 c=0; 78 if(p!=(int)p)//选择性计算,如果是整数就不用进行这一步的计算了 79 { 80 d=p-(int)p;//取小数部分 81 while(d!=0) 82 { 83 b[c]=(int)(d*n);//算法为×N取整 84 d=d*n-b[c]; 85 c++; 86 if(c>=10) 87 break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环 88 } 89 } 90 if(num[0]=='-') 91 { 92 out[0]='-'; 93 ii++; 94 } 95 for(j=i-1;j>=0;j--,ii++)//反序输出,大于10的数字进行相应的变化 96 { 97 if(h[j]==10) out[ii]='A'; 98 else if(h[j]==11) out[ii]='B'; 99 else if(h[j]==12) out[ii]='C'; 100 else if(h[j]==13) out[ii]='D'; 101 else if(h[j]==14) out[ii]='E'; 102 else if(h[j]==15) out[ii]='F'; 103 else if(h[j]==9) out[ii]='9'; 104 else if(h[j]==8) out[ii]='8'; 105 else if(h[j]==7) out[ii]='7'; 106 else if(h[j]==6) out[ii]='6'; 107 else if(h[j]==5) out[ii]='5'; 108 else if(h[j]==4) out[ii]='4'; 109 else if(h[j]==3) out[ii]='3'; 110 else if(h[j]==2) out[ii]='2'; 111 else if(h[j]==1) out[ii]='1'; 112 else out[ii]='0'; 113 } 114 if(p!=(int)p)//选择性输出,这样可以节约输出时间和程序的运行时间 115 { 116 out[ii++]='.'; 117 for(j=0;j<c;j++)//正序输出 118 { 119 if(b[j]==10) out[ii]='A'; 120 else if(b[j]==11) out[ii]='B'; 121 else if(b[j]==12) out[ii]='C'; 122 else if(b[j]==13) out[ii]='D'; 123 else if(b[j]==14) out[ii]='E'; 124 else if(b[j]==15) out[ii]='F'; 125 else if(b[j]==9) out[ii]='9'; 126 else if(b[j]==8) out[ii]='8'; 127 else if(b[j]==7) out[ii]='7'; 128 else if(b[j]==6) out[ii]='6'; 129 else if(b[j]==5) out[ii]='5'; 130 else if(b[j]==4) out[ii]='4'; 131 else if(b[j]==3) out[ii]='3'; 132 else if(b[j]==2) out[ii]='2'; 133 else if(b[j]==1) out[ii]='1'; 134 else out[ii]='0'; 135 ii++; 136 } 137 } 138 //puts(out); 139 return 0; 140 } 141 }
参考:Linux C编程从初学到精通 。
转载于:https://www.cnblogs.com/kongtiao/archive/2012/04/20/2459523.html
【笔记】【C语言】任意进制之间的转换(支持小数部分)相关推荐
- 任意进制之间的转换(C++实现)
任意进制之间的转换(C++实现) 题目描述 输入格式: 第一行输入两个整数 n 和 m (2<=n,m<=16),n 代表的是第二行输入的数的进制,m 代表的是输出的数字的进制. 第二行输 ...
- 二进制数与十进制之间的转换以及使用一个函数实现任意进制之间的转换
其他进制转为十进制都可以实现,只需要将函数中的10和2换掉你需要的就行 #include <stdio.h> #include <math.h>// 1. 二进制转换为十进制 ...
- python编写程序转换进制_Python实现任意进制之间的转换
在日常生活中我们频繁使用到数学的进制,如季度逢三进一,星期逢七进一:生肖.小时使用12进制,每天使用24进制,每月使用30进制,分秒使用60进制,一年使用360进制等等:在编程过程中我们经常需要转换进 ...
- JavaSE笔记(09) —— 进制之间的转换以及原码,反码,补码的讲解
进制的介绍 对于整数,有四种表示方式: 二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头: 十进制:0-9 ,满 10 进 1: 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示: ...
- matlab二进制十进制十六进制和任意进制之间的转换
>> a=bin2dec('1011001') %将二进制转换为10进制 a = 89 >> b=dec2bin(22) %将10进制转换为2进制 b = 10110 & ...
- 进制转换—任意进制之间的转换
一.十进制转化为任意进制 1.十进制数num转为七进制:力扣504 class Solution {public String convertToBase7(int num) {if(num==0){ ...
- c 语言转换成php语言,C++_C 语言进制之间的转换,二进制、八进制和十六进制向 - phpStudy...
C 语言进制之间的转换 二进制.八进制和十六进制向十进制转换都是非常容易的,就是"按权相加". 所谓"权",也即"位权".例如,十进制第1位 ...
- C语言实现不同进制之间的转换
C语言实现不同进制之间的转换 说明 运行环境 1.十进制转二进制 2.二进制转换成十进制数 3.十进制数转换成十六进制数 4.十六进制数转换成十进制数 说明 1.进制转换目前只限于非负数之间的转换(带 ...
- 简单的C语言任意进制转换器
简单的C语言任意进制转换器 该进制转换器可进行任意进制转换,请看效果图: 代码 /** ******函数声明******进制函数,输入与输出 void main();******返回将n进制num转换 ...
最新文章
- 策略模式原来这么简单!
- nginx php默认首页,iis、apache、nginx设置默认首页index.html方法图解 电脑维修技术网...
- Spring框架—IoC容器
- SQL Server 急救包(First Responder Kit)入门教程
- 使用scikit中的聚类
- 报错,void AcceptAndReadAvailableTracks(const QString param, int timeout)
- 金融科技火热无比时,支付场景下的风控可以怎么做?(下)
- lucene造成磁盘空间不足的问题
- iOS从零开始学习直播之音频4.歌词
- Ubuntu升级php7.0配置fpm socket
- 解决网站开通https后地址栏图标小锁变成灰色警告图标教程
- Fiddler抓取雷电模拟器数据包,模拟器代理设置
- CamScanner扫描全能王视频教程-Array老师-专题视频课程
- 计算机论文研究思路怎么写,论文的研究思路模板范文 课题研究思路怎么写
- c语言我想你,c语言土味情话
- 详解1M宽带下载速度?1M等于多少kb?
- 常见的打印机无法打印问题
- 串口DCB定义,配置例程
- 结合stata和pyecharts对双11淘宝销量数据分析(进度5%,咯咯咯 我鸽了)
- Ubuntu14.04 安装 Python3.6
热门文章
- python怎么做情感分析_如何用python进行情感分析
- C11头文件threads.h声明了创建和管理线程,信号,条件变量的函数
- 跨平台APP----对Cordova,APPCan,DCloud,APICloud四大平台的分析
- windows下cocos2d-x android打包
- VS2008创建win32动态链接库图文流程
- movelast对数据记录数有要求吗_客户验厂,电脑坏了,考勤记录数据可以自动生成找回来吗?...
- Android集成Zxing
- HUE与HBase的集成
- 认识JWT(JSON WEB TOKEN)
- jqGrid中时间控件input的值赋给点开后的laydate控件