?? 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 + -