键入十进制无符号实数和所需转换的进制基数(2~16),输出对应的进制数。

算法关键:
1:整数部分:
设有无符号10进制数整数部分为D,要转化为N进制数:
用D%N得余数,再将D的值更新为D/N,将余数存在数组T中,并逆序输出T即可得到

do{T[i++] = D%N; D = D/N;}while(D);
for(i-- ; i>=0 ;i--) printf("%d\n",T[i]);

2:小数部分:设有无符号10进制小数部分为d,要转换为N进制数:
用dN,再用int(dN)取整数,存在数组t中,并正序输出t
再将d的值更新为d=d*N-t[i]。小数部分需要设定一个精度。

for(int i=1 ; i<=5 ; i++)  
{
t[i] = int(d*N); 
d=d*N-t[i];
printf("%d",t[i]);
} 

3:当N》10之后,一个N进制转换后大于等于10的数字输出应该是字母。(例如16进制的10,11,12,13,14,15在计算机中应该显示为A,B,C,D,E,F)。即存在数组T和t中的是字母A到F 而不是数字10~15。
这里我们用数组的下标和数组里存的内容的一 一映射关系来解决这个问题。

char S[] = ["0123456789ABCDEF"] //若T[i]里面存的值为14,则输出S[T[i]] = E

源代码:

键入十进制无符号实数和所需转换的进制基数(2~16),输出对应的进制数。

运行结果:
输入D=2157.78125,16
输出:
键入十进制无符号实数和所需转换的进制基数(2~16),输出对应的进制数。

输入D=2157.48,8
输出:
键入十进制无符号实数和所需转换的进制基数(2~16),输出对应的进制数。
输入D=12.12,10
输出:
键入十进制无符号实数和所需转换的进制基数(2~16),输出对应的进制数。
理想情况下应输出12.12才对。所以这是为啥???
另外:用codeblocks编译时无论输入的是什么值,输出的都为x.00000,这又是为啥???