求c++各进制转换的代码(double浮点数)
已知double10进制浮点数,要求转换为2进制8进制16进制顺便问下vc有没有提供直接进制转换的api函数,有的话是什么注意:小数部分也要实现...
已知double10进制浮点数,要求转换为2进制8进制16进制
顺便问下vc有没有提供直接进制转换的api函数,有的话是什么
注意:小数部分也要实现 展开
顺便问下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");
}
#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 广告
2024-07-18 广告
Excel一键自动匹配,在线免费vlookup工具,3步完成!Excel在线免费vlookup工具,点击93步自动完成vlookup匹配,无需手写公式,免费使用!...
点击进入详情页
本回答由TableDI提供
展开全部
在这里献丑了!
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.要进行浮点数的进制转换就得找准小数点的位置.然后按照类似的方法就可以了
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.要进行浮点数的进制转换就得找准小数点的位置.然后按照类似的方法就可以了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
偶自己写的
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;
}
}
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;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询