⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 超大二进制与十进制的转化(包含十进制转化为二进制
💻 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 + -