【笔记】【C语言】任意进制之间的转换(支持小数部分)
2012-04-20 16:34
531 查看
整理一下,免得自己忘记,也希望能帮到有需要的人。
————————————————————————我是一条华丽的分割线————————————————————————
全局变量:双精度浮点数p、字符数组out。
当其他进制转换成十进制时,将转换结果存储在浮点数p中;当十进制转换成其他进制时,将结果以字符串的形式存放在字符数组out中。
转换过程分为整数部分和小数部分,整数部分转换后需逆序输出,而小数部分顺序输出。
例如:
表示将num字符串数组所对应的一个八进制数转换成一个十进制数。
直接上代码
参考:Linux C编程从初学到精通 。
————————————————————————我是一条华丽的分割线————————————————————————
全局变量:双精度浮点数p、字符数组out。
当其他进制转换成十进制时,将转换结果存储在浮点数p中;当十进制转换成其他进制时,将结果以字符串的形式存放在字符数组out中。
转换过程分为整数部分和小数部分,整数部分转换后需逆序输出,而小数部分顺序输出。
例如:
Conversion(num,8,10);
表示将num字符串数组所对应的一个八进制数转换成一个十进制数。
直接上代码
int Conversion(char num[20], int t, int n) { int i,ii,j,k,m,x,b[30],h[30],c; double d,r; ii=0; p=0; memset(out,0,20); m=strlen(num);//求字符串的长度 x=m; for(k=0,j=0;k<m;k++)//主要是分段,以小数点为界限,只转换整数部分 { if(num[k]=='.') { x=k; break; } } for(j=x-1;j>=0;j--) { if(num[j]=='-') break; //符号的处理 if(num[j]=='A') r=10; else if(num[j]=='B') r=11; else if(num[j]=='C') r=12; else if(num[j]=='D') r=13; else if(num[j]=='E') r=14; else if(num[j]=='F') r=15; else r=num[j]-'0';//将字符转换成数字 p=p+r*(pow ((double)t,(double)(x-j-1)));//计算结果 } if(num[x]=='.') { for(j=x+1;j<m;j++) { if(num[j]=='A') r=10; else if(num[j]=='B') r=11; else if(num[j]=='C') r=12; else if(num[j]=='D') r=13; else if(num[j]=='E') r=14; else if(num[j]=='F') r=15; else r=num[j]-'0';//将字符转换成数字 p=p+r*(pow ((double)t, (double)(x-j))); } } //g_print("%f",p); if(n==10)//如果要转换成十进制 { if(num[0]=='-') { p=-p; } return 0; } else //如果要转换成其他进制 { k=(int)p; i=0; while(k)//判定需要转换的数是否变为0 { h[i++]=k%n;//取余,进行进制转换,但是顺序与正确值相反 k/=n;//转换一位之后进行相应的变化 } c=0; if(p!=(int)p)//选择性计算,如果是整数就不用进行这一步的计算了 { d=p-(int)p;//取小数部分 while(d!=0) { b[c]=(int)(d*n);//算法为×N取整 d=d*n-b[c]; c++; if(c>=10) break;//主要是控制小数后面万一出现无限小数的时候好跳出循环以免出现死循环 } } if(num[0]=='-') { out[0]='-'; ii++; } for(j=i-1;j>=0;j--,ii++)//反序输出,大于10的数字进行相应的变化 { if(h[j]==10) out[ii]='A'; else if(h[j]==11) out[ii]='B'; else if(h[j]==12) out[ii]='C'; else if(h[j]==13) out[ii]='D'; else if(h[j]==14) out[ii]='E'; else if(h[j]==15) out[ii]='F'; else if(h[j]==9) out[ii]='9'; else if(h[j]==8) out[ii]='8'; else if(h[j]==7) out[ii]='7'; else if(h[j]==6) out[ii]='6'; else if(h[j]==5) out[ii]='5'; else if(h[j]==4) out[ii]='4'; else if(h[j]==3) out[ii]='3'; else if(h[j]==2) out[ii]='2'; else if(h[j]==1) out[ii]='1'; else out[ii]='0'; } if(p!=(int)p)//选择性输出,这样可以节约输出时间和程序的运行时间 { out[ii++]='.'; for(j=0;j<c;j++)//正序输出 { if(b[j]==10) out[ii]='A'; else if(b[j]==11) out[ii]='B'; else if(b[j]==12) out[ii]='C'; else if(b[j]==13) out[ii]='D'; else if(b[j]==14) out[ii]='E'; else if(b[j]==15) out[ii]='F'; else if(b[j]==9) out[ii]='9'; else if(b[j]==8) out[ii]='8'; else if(b[j]==7) out[ii]='7'; else if(b[j]==6) out[ii]='6'; else if(b[j]==5) out[ii]='5'; else if(b[j]==4) out[ii]='4'; else if(b[j]==3) out[ii]='3'; else if(b[j]==2) out[ii]='2'; else if(b[j]==1) out[ii]='1'; else out[ii]='0'; ii++; } } //puts(out); return 0; } }
参考:Linux C编程从初学到精通 。
相关文章推荐
- 【C语言】任意进制之间的转换(支持小数部分)
- POJ 1131 Octal Fractions 任意进制之间小数的转换
- 计算机进制之间的转换(包含小数部分)
- 二进制至三十六进制之间的任意转换-C语言
- C语言从键盘输入一个十进制数将其转换为任意进制数输出
- C语言之任意进制的转换
- 任意进制与十进制之间的转换
- C语言之任意进制的转换
- C语言再学习——C语言中进制之间的转换
- 任意进制整数之间的相互转换(C++实现)
- Linux下的C语言编程——10进制转换成任意进制的字符串
- 初学C#之进制转换(支持十进制小数转任意进制【2到36进制】)
- C语言实现任意进制的转换,主要注意代码的小技巧
- POJ 1220 (两种任意进制之间的转换(大数),java的BigInteger)
- C语言实现任意进制的转换,主要注意代码的小技巧
- java入门学习笔记,不同进制之间的转换!
- 任意进制间的转换(用c语言实现)
- Python实现任意进制之间的转换
- toString()方法对数字与关键字parseInt()方法对带有数字的字符串中数字进制之间转换-学习笔记
- C语言中进制之间的想换转换