c语言小数t转字符串数组,【笔记】【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

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

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

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

标签:10,num,进制,int,else,ii,C语言,out,小数

来源: https://blog.csdn.net/D_Boat/article/details/111464958

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值