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

已知double10进制浮点数,要求转换为2进制8进制16进制
顺便问下vc有没有提供直接进制转换的api函数,有的话是什么

注意:小数部分也要实现

#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");
}

参考资料:网上

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-25
在这里献丑了!

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.要进行浮点数的进制转换就得找准小数点的位置.然后按照类似的方法就可以了本回答被网友采纳
第2个回答  2023-03-11

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)

第3个回答  2011-01-03
偶自己写的
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;
}
}本回答被提问者采纳

求c++各进制转换的代码(double浮点数)
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)...

二进制如何转为十进制(浮点数 c++)
"2 >> 10","二进制转为十进制",,,"#NUM!",,"於十进制的值","二进制数值∶",0,,"#NUM!",10,0,"x",2,0,"=",0 ,,,"#NUM!",100,0,"x",2,1,"=",0 ,"十进制数值∶",0,,"#NUM!",1000,0,"x",2,2,"=",0 ,,,"#NUM!",10000,0,"x",2,3,"=",0 ,,,"#...

c++中的double是什么,有什么作用,烦举一例。
double(双精度浮点型)是计算机使用的一种资料型别。比起单精度浮点数(float),double(双精度浮点数)使用 64 位(8字节) 来储存一个浮点数。它可以表示十进制的15或16位有效数字,负值取值范围为 -1.7976E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769...

C++ 任意进制之间的转换,包含小数的程序怎么写
cout<<"转换前数为:"<<value<<",转换后数为:";for(k=0;k<j;k++)cout<<D[k];if((value-(int)value)!=0){ cout<<".";for(k=0;k<i;k++)cout<<F[k];} cout<<"。\\n";} 这个函数已把valude和转换后的数输出了。s_gaara 另外,虚机团上产品团购,超级便宜 ...

C++编程题,八进制小数转换为10进制小数,题目描述如下:
for(int i=len-1;s[i]!='.';i--)\/\/小数点前面的处理 { n\/=double(8.0);\/\/转化为十进制 n+=double(s[i]-'0');} n\/=double(8.0);\/\/小数点前那一个还没处理 printf("%s",s);printf(" [8] = %.45g [10]\\n",n);\/\/%g指代浮点数,去掉无意义的零 } return 0;} ...

二进制中浮点数怎么表示
double 1 11 52 64 以下通过几个例子讲解浮点数如何转换为二进制数例一:已知:double类型38414.4。求:其对应的二进制表示。分析:double类型共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位:最高位63位是符号位,1表示该数为负,0表示该数为正;62-52位...

c++中如何将各进制转化成十进制
int main(){ char s[60]="10011110101110010100010"; \/\/二进制数 char s16[8]="0E0E"; \/\/十六进制数 int a,b;a = strtol(s,NULL,2); \/\/二进制转整型数 printf("%d\\n",a); \/\/ 按十进制输出 b = strtol(s16,NULL,16); \/\/16进制转整型数 printf("%d\\n",b);...

如何利用C++互相转换10(0~9)进制和36进制(0~9,A~Z)?请给出代码。
cout<<"输入的36进制数为:"<<num<<",转换为10进制为"<<backnumber<<endl;} else cout<<"请检查输入的进制数是否正确!!!";cout<<endl;} } \/\/整体思路是十进制转换为36进制时,将十进制数除以36,余数放在最末位,让后将商再除以36,余数放到倒数第二位,直到商小于 \/\/36为止 \/\/36...

c++函数编程实现自然数的十进制、二进制、八进制、十六进制转换
{ cout<<"输入需要转换的进制:2-9,16,32(输入0退出)";cin>>choice;switch(choice){ case 2: Transform(n,2); break;case 3: Transform(n,3); break;case 4: Transform(n,4); break;case 5: Transform(n,5); break;case 6: Transform(n,6); break;case 7: Transform...

任意进制互换的c++程序,编绎通过加分,明天交!!!急!!!
double r=0;i = strlen(num); \/* 数值的长度 *\/ if ((base1<MIN_BASE) || (base1>MAX_BASE) || (base2<MIN_BASE) || (base2>MAX_BASE))printf("err!");for (j=0;j<i;j++) { r = pow(base1,i-j-1); \/* 计算数基的幂指数 *\/ if (base1<=10) l ='9' - (...

相似回答