?? f_convert.cpp
字號:
#include<iostream>
#include"conio.h"
#include"head.h"
using namespace std;
//*********************************************************************************************************
// XCONVERT10類實現的開始
//*********************************************************************************************************
xconvert10::xconvert10() //構造函數,輸入要輸入數字的進制
{
xlong=0;
xpoint=999;
head_a=0;
end_a=0;
cout<<"請輸入您將要輸入的數字的進制(2、8、10、16):";
cin>>x;
while((!cin)||(!((x==2)||(x==8)||(x==10)||(x==16))))
{
cout<<"您輸的數據不合法,請輸入數字:";
cin.clear();
cin.ignore(1024,'\n');
cin>>x;
}
for(int i=0;i<100;i++)
array[i]=' ';
}
void xconvert10::check1() //檢查輸入的進制是否違規
{
int inspect(0); //inspect是用于標記輸入的是否是2,8,10,16合法字符 不是則提示重新輸入
switch(x) //用于判斷輸入是否合法 合法將1付給INSPECT
{
case 2:
inspect=1;
break;
case 8:
inspect=1;
break;
case 10:
inspect=1;
break;
case 16:
inspect=1;
break;
default:
inspect=0;
break;
}
while(inspect==0)
{
cout<<endl<<"你輸入的是"<<x<<"錯誤的進制,請重新輸入:";
cin.ignore(1024,'\n');
cin>>x;
switch(x)
{
case 2:
inspect=1;
break;
case 8:
inspect=1;
break;
case 10:
inspect=1;
break;
case 16:
inspect=1;
break;
default:
inspect=0;
}
}
cout<<endl<<"您輸入的進制為:"<<x<<endl;
}
void xconvert10::input() //輸入X進制數字
{
int i=0;
xlong=0;
xpoint=999;
cout<<"請輸入您的"<<x<<"進制數字:";
cin.ignore(1024,'\n');
cin>>array;
while(array[i])
{
xlong++; //取數組長度
if(array[i]=='.'&&xpoint==999)
{
xpoint=i; //取小數點位置
}
i++;
}
cout<<endl<<"你輸入的數字為:";
cout<<array<<endl;
check2();
}
void xconvert10::check2() //檢查輸入的數字是否合法
{
int i=0;
int num_wrong=0; //檢測輸入的數字是否含有非法字符 如:二進制只能有0,1,'.'
int point_wrong=0; //檢查小數點的個數是否正確,可以為0或者1
switch(x)
{
case 2:
while(array[i]!='\0')
{
if(array[i]!='1'&&array[i]!='0'&&array[i]!='.')
num_wrong=1;
if(array[i]=='.')
{
point_wrong++;
}
i++;
}
break;
case 8:
while(array[i]!='\0')
{
if((array[i]<'0'||array[i]>'7')&&array[i]!='.')
num_wrong=1;
if(array[i]=='.')
{
point_wrong++;
}
i++;
}
break;
case 10:
while(array[i]!='\0')
{
if((array[i]<'0'||array[i]>'9')&&array[i]!='.')
num_wrong=1;
if(array[i]=='.')
{
point_wrong++;
}
i++;
}
break;
case 16:
while(array[i]!='\0')
{
if((array[i]<'0'||array[i]>'9')&&array[i]!='.'&&(array[i]<'a'||array[i]>'f')&&(array[i]<'A'||array[i]>'Z'))
num_wrong=1;
if(array[i]=='.')
{
point_wrong++;
}
i++;
}
break;
}
if(array[0]=='\0')
num_wrong=1;
if(num_wrong==1||point_wrong>1||xpoint==0)
{
cout<<endl<<"你輸入的數字不合法請重新輸入"<<endl;
input();
}
}
void xconvert10::array_convert()
{
int i=0;
while(array[i]!='\0')
{
switch(array[i])
{
case '.':
a_int[i]=0;
break;
case '0':
a_int[i]=0;
break;
case '1':
a_int[i]=1;
break;
case '2':
a_int[i]=2;
break;
case '3':
a_int[i]=3;
break;
case '4':
a_int[i]=4;
break;
case '5':
a_int[i]=5;
break;
case '6':
a_int[i]=6;
break;
case '7':
a_int[i]=7;
break;
case '8':
a_int[i]=8;
break;
case '9':
a_int[i]=9;
break;
case 'a':
a_int[i]=10;
break;
case 'b':
a_int[i]=11;
break;
case 'c':
a_int[i]=12;
break;
case 'd':
a_int[i]=13;
break;
case 'e':
a_int[i]=14;
break;
case 'f':
a_int[i]=15;
break;
case 'A':
a_int[i]=10;
break;
case 'B':
a_int[i]=11;
break;
case 'C':
a_int[i]=12;
break;
case 'D':
a_int[i]=13;
break;
case 'E':
a_int[i]=14;
break;
case 'F':
a_int[i]=15;
break;
}
i++;
}
}
void xconvert10::convert()
{
int m=0,n=1;
float f=1;
if(xpoint!=999)
for(m=xpoint-1;m>-1;m--)
{
head_a+=n*a_int[m];
n*=x;
}
else
for(m=xlong-1;m>-1;m--)
{
head_a+=n*a_int[m];
n*=x;
}
if(xpoint!=999)
{
for(m=xpoint+1;m<xlong;m++)
{
f/=x;
end_a+=f*a_int[m];
}
}
else
{
end_a=0;
}
}
void xconvert10::output()
{
cout<<"head_a="<<head_a<<endl;
cout<<"end_a="<<end_a<<endl;
}
//*********************************************************************************************************
// C_RESULT類實現的開始
//*********************************************************************************************************
c_result::c_result()
{
num.input();
num.array_convert();
num.convert();
cout<<"請輸入您將要輸出的數字的進制(2、8、10、16):";
cin.ignore(1024,'\n');
cin>>y;
while((!cin)||(!((y==2)||(y==8)||(y==10)||(y==16))))
{
cout<<"您輸的數據不合法,請輸入數字:";
cin.clear();
cin.ignore(1024,'\n');
cin>>y;
}
}
void c_result::head_output()
{
int head,result,i=0;
int Store[100];
head=num.get_head_a();
cout<<"你要的結果是(小數點后精確最多10位):";
while(head>=y)
{
result=head%y;
head/=y;
Store[i]=result;
++i;
}
Store[i]=head;
for(;i>-1;i--)
switch(Store[i])
{
case 0:
cout<<"0";
break;
case 1:
cout<<"1";
break;
case 2:
cout<<"2";
break;
case 3:
cout<<"3";
break;
case 4:
cout<<"4";
break;
case 5:
cout<<"5";
break;
case 6:
cout<<"6";
break;
case 7:
cout<<"7";
break;
case 8:
cout<<"8";
break;
case 9:
cout<<"9";
break;
case 10:
cout<<"a";
break;
case 11:
cout<<"b";
break;
case 12:
cout<<"c";
break;
case 13:
cout<<"d";
break;
case 14:
cout<<"e";
break;
case 15:
cout<<"f";
break;
}
}
void c_result::end_output()
{
float end,result,cmp;
int count=1,mul;
cmp=0.0;
end=num.get_end_a();
if(end!=cmp)
{ cout<<".";
while(count<=10&&end)
{
mul=int(end*y);
switch(mul)
{
case 0:
cout<<"0";
break;
case 1:
cout<<"1";
break;
case 2:
cout<<"2";
break;
case 3:
cout<<"3";
break;
case 4:
cout<<"4";
break;
case 5:
cout<<"5";
break;
case 6:
cout<<"6";
break;
case 7:
cout<<"7";
break;
case 8:
cout<<"8";
break;
case 9:
cout<<"9";
break;
case 10:
cout<<"a";
break;
case 11:
cout<<"b";
break;
case 12:
cout<<"c";
break;
case 13:
cout<<"d";
break;
case 14:
cout<<"e";
break;
case 15:
cout<<"f";
break;
}
end=end*y-mul;
count++;
}
}
cout<<endl<<"謝謝使用";
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -