求c++各进制转换的代码(double浮点数)

已知double10进制浮点数,要求转换为2进制8进制16进制顺便问下vc有没有提供直接进制转换的api函数,有的话是什么注意:小数部分也要实现... 已知double10进制浮点数,要求转换为2进制8进制16进制
顺便问下vc有没有提供直接进制转换的api函数,有的话是什么

注意:小数部分也要实现
展开
 我来答
百度网友b598f2a65
2010-12-24 · 超过18用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:34.4万
展开全部
#include<stdio.h>

#define N 50
void binarysys();
void octalsys();
void hex();

void main()
{
printf("进制转换器\n");
int select;
do
{
printf("=================================================================\n");
printf("0、退出\t1、十进制~二进制\t2、十进制~八进制\t3、十进制~十六进制\n");
printf("请选择功能:");
scanf("%d",&select);
if(select==0)
{
break;
}
switch(select)
{
case 1: binarysys();break;
case 2: octalsys();break;
case 3: hex();break;
default : printf("请输入0~3其中的数!\n");
}
}while(1);
}

void binarysys()
{
long int number,i=0;
int arr[N];
printf("请输入一个数:");
scanf("%d",&number);

while(number>=0)
{
if(number<2)
{
arr[i]=number;
break;
}
arr[i]=number%2;
number/=2;
i++;
}
printf("这个数转为二进制后为:");
for(; i>=0; i--)
{
printf("%d",arr[i]);
}
printf("\n");
}

void octalsys()
{
long int number,i=0;
int arr[N];
printf("请输入一个数:");
scanf("%ld",&number);
while(number>=0)
{
if(number<8)
{
arr[i]=number;
break;
}
arr[i]=number%8;
number/=8;
i++;
}
printf("这个数转为八进制后为:");
for(;i>=0;i--)
{
printf("%d",arr[i]);
}
printf("\n");
}

void hex()
{
long int number,i=0;
int arr[N];
printf("请输入一个数:");
scanf("%ld",&number);
while(number>=0)
{
if(number<16)
{
arr[i]=number;
break;
}
arr[i]=number%16;
number/=16;
i++;
}
printf("这个数转为十六进制后为:");
for(;i>=0;i--)
{
switch(arr[i])
{
case 1: printf("%d",arr[i]);break;
case 2: printf("%d",arr[i]);break;
case 3: printf("%d",arr[i]);break;
case 4: printf("%d",arr[i]);break;
case 5: printf("%d",arr[i]);break;
case 6: printf("%d",arr[i]);break;
case 7: printf("%d",arr[i]);break;
case 8: printf("%d",arr[i]);break;
case 9: printf("%d",arr[i]);break;
case 10:
arr[i]='A';
printf("%c",arr[i]);
break;
case 11:
arr[i]='B';
printf("%c",arr[i]);
break;
case 12:
arr[i]='C';
printf("%c",arr[i]);
break;
case 13:
arr[i]='D';
printf("%c",arr[i]);
break;
case 14:
arr[i]='E';
printf("%c",arr[i]);
break;
case 15:
arr[i]='F';
printf("%c",arr[i]);
break;
case 16:
arr[i]='G';
printf("%c",arr[i]);
break;
}
}
printf("\n");
}

参考资料: 网上

TableDI
2024-07-18 广告
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击93步自动完成vlookup匹配,无需手写公式,免费使用!... 点击进入详情页
本回答由TableDI提供
ijtni96
2010-12-25 · TA获得超过197个赞
知道答主
回答量:308
采纳率:0%
帮助的人:232万
展开全部
在这里献丑了!

1.将你输入的数通过字符串的方式存储是方便一下的计算的
正如你举得例子,输入137 数组中存入的是 字符型的137 要将
里面的每个字符型的数字转换成数值型的数字就得 *p-'0',因为
字符存储时实际存储的是字符的ASC码, 例如 输入 1(字符型)ASCII码为
49 若不减去0的ASC码 就会以49去参加运算
这个while循环是用于数制转换的.将八进制转换成10进制,其实就是将8进制数码按权展开,137=1*8^2+3*8^1+7*8^0
2这个while就是这个用处,一步一步看下去,加入输入为137存储为字符137
第一次是将字符型的1减去0的asc码就得到了数值型的1 1本来是最高位应该是但是这里得到的只有系数(姑且叫做系数吧而权为8^0=1),由于后面还有两个数,这样通过循环n=n*8+*p-'0';将1的权值提升到了8^2,对第二位也类似.
3.要进行浮点数的进制转换就得找准小数点的位置.然后按照类似的方法就可以了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做一支健康的望日葵
2023-03-11 · 超过34用户采纳过TA的回答
知道答主
回答量:588
采纳率:89%
帮助的人:19万
展开全部

double10进制浮点数转换为2进制8进制16进制的方法如下:

  • 十进制转换为二进制,分为整数部分和小数部分。

  • 整数部分:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。

  • 小数部分:乘2取整法,即每次将小数部分乘以2,整数部分为该位权上的数,而小数部分继续乘以2,整数部分又为下一个位权上的数字。这个步骤一直持续下去。如果小说部分变成0,则停止;如果出现无限循环,则在循环开始处加括号表示重复。

  • 十进制转换为八进制或十六进制类似于转换为二进制。只是除以8或16取余,并且十六进制中需要用A-F来表示10-15。

  • 反过来也可以用相同的方法将二进制8进制16进制转换为十进制。

  • 例如:10.625(10) = 1010.101(2) = 12.5(8) = A.A(16)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wzshiming
2011-01-03 · TA获得超过1527个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:253万
展开全部
偶自己写的
2~32进制之间任意数都可以转换 有浮点数的
(*^__^*) 嘻嘻… 献丑了
#include<iostream>
using namespace std;
double pow(int m,int n)
{
double s=1;
if(n<0)
{
n=-n;
while(n--)s*=m;
s=1/s;
}
else while(n--)s*=m;
return s;
}
int main()
{
cout<<"//任意进制转换(保留12位小数)" <<endl
<<"//(用空格隔开) 要转换的数 原先的进制 转换后的进制 "<<endl;
int x,y;
char c[64];
while(cin >> c>>x>>y)
{
cout <<"("<<c<<")"<<x<<endl<<"=(0";
long double n=0;
int i=0,k=0,t=0;
while(c[++k])
{
if(c[k]==46)
i=k;
if(c[k]>=x+(x>9?55:48))t++;
}
if(!i)
{
c[k]=46;
i=k;
}
int a=0;
for(;k--;)
{
if(c[k]!=46)
n+=pow(x,i-k-a)*(c[k]-(c[k]>57?55:48));
else a=1;
}
int s=n;
long double m=n-s;
int b[64];
i=0;
while(s)
{
b[i++]=s%y;
s/=y;
}
while(i--) cout << (char)(b[i]+(b[i]>9?55:48));
if(m)
{
int z=12;
cout <<".";
while(m&&z--)
{
m*=y;
cout<<(char)(m+((int)m>9?55:48));
m-=(int)m;
}
}
cout<<")"<<y<<endl;
if(t)cout<<"有"<<t<<"个要转换的数与进制不服"<<endl;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式