📄 1.cpp
字号:
#include<iostream>
#include<cmath>
#include<cstring>
#include<iomanip>
using namespace std;
int M(double k) //此函数用于对double数求%2
{
for(;k>=2;k-=2) //k〉=2时,k=k-2
;
return (int)k; //直到k〈2时,返回k
}
void f(double n) //定义函数把十进制转化为二进制输出
{
int a[64]={0},i=0,j=0;//定义数组a来储存转化为二进制
if(n<0) //如果输入为负,输出补码
{
n=-n;//如果为负,先把他转化为正数,
while(n>0)//求出其相反数的补码
{
a[i]=!M(n);
n=(n-!a[i])/2;
i++;
}
for(;i<63;i++)
a[i]=1;
a[63]=1;//符号位置为1
if(a[0]==0)//将其反码以二进制方式加1
a[0]=1;//若反码的最后一位是0,将其变为1
else
{
while(a[j])//否则将与其相邻的连续为1的位都值为0
{
a[j++]=0;
}
a[j]=1;//第一个为零的数置为1
}
for(i=63;i>=0;i--)//以64位数打印出其补码
cout<<a[i];
}
else if(n==0)//若输入的数为零,则直接输出0
cout<<0;
else
{
while(n>0)//若输入为正时
{
a[i]=M(n);//将其对2求模,结果放在数组a中
n=(n-a[i])/2;//然后将其除以2,取整
i++; //数组后移
} //直到n<=0
for(i-=1;i>=0;i--)//打印出转化结果
cout<<a[i];
}
}
double g(char s[]) //定义函数将二进制转化为十进制
{
int i=0,m=0,a[100]={0};//数组a用来存放二进制中每一位的数字
double sum=0; //sum用来储存转化结果
i=strlen(s); //i为字符串长度
for(;i>0;i--)
{
if((int)s[i-1]==49) //如果是1就在数组a中记录为1
a[m++]=1;
else if((int)s[i-1]==48)//如果是0就在数组a中记录为0
a[m++]=0;
else
{
cout<<"Sorry!您输入的数据有误!"<<endl;//若是其它字符则显示错误
exit(1);
}
}
for(int j=0;j<=m;j++) //累加求出十进制数
if(a[j])
sum+= pow(2.0,(double)(j));
return sum; //将结果返回
}
void main()
{
double n; char str[64];
cout<<"输入一个十进制数"<<endl;
cin>>n; //输入十进制数n
cout<<"转化为二进制的结果为:"<<endl;
f(n); //调用函数输出转化结果
cout<<endl; //回车换行
cout<<"输入一个二进制的数"<<endl;
cin>>str; //将二进制数作为字符串输入
cout<<"转化为十进制的结果为:";
cout<<setiosflags(ios::fixed)<<setprecision(0)<<g(str)<<endl; //调用函数输出转化结果
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -