?? main.cpp
字號:
#include <string>
#include <iostream>
#include<String.h>
#include<cstdlib>
#include "fnumber.h"
using namespace std ;
int input_stepcode(string & stepcode)
{
cout<<"★請輸入操作數的階碼: "<<endl;
cin>>stepcode;
string s;
for(int i=0;i<stepcode.length();i++)
{
s=stepcode.substr(i,1);
if(s!="0" && s!="1" && s!="-")
{
cout<<"◎輸入錯誤! 輸入串只能含有:0 1 負號 請重新輸入! "<<endl;
return 0;
}
}
return 1; // normal
}
int input_mantissa(string & mantissa)
{
cout<<"★請輸入操作數的尾數: "<<endl;
cin>>mantissa;
string s;
for(int i=0;i<mantissa.length();i++)
{
s=mantissa.substr(i,1);
if(s!="0" && s!="1" && s!="-" &&s!=".")
{
cout<<"◎輸入錯誤! 輸入串只能含有:0 1 小數點 負號 請重新輸入! "<<endl;
return 0;
}
}
if(mantissa.rfind("-",mantissa.length())>=1&&mantissa.rfind("-",mantissa.length())!=string::npos) // test -
{
cout<<"◎輸入的符號位位置不正確. 重新輸入!"<<endl;
return 0;
}
if(mantissa.rfind(".",mantissa.length())>=3)
{
cout<<"◎輸入的小數點位置不正確. 重新輸入!"<<endl;
return 0;
}
return 1;
}
void reverseadd(string& s)//求反加一
{
int len=s.length();
for(int i=0;i<len;i++)
{
if(s.substr(i,1)=="0")
s.replace(i,1,"1");
else
s.replace(i,1,"0");
}
while(len>0)
{
if(s.substr(len-1,1)=="0")
{
s.replace(len-1,1,"1");
break;
}
else
s.replace(len-1,1,"0");
len--;
}
}
int main(int argc, char* argv[])
{
string result; //save 運算結果
string operation ;// save 運算符
int stepcodebit; // save 階碼位數
int mantissabit; //save 尾數位數
cout<<endl;
cout<<" **************************************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 浮點數運算器 *"<<endl;
cout<<" * *"<<endl;
cout<<" **************************************************"<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"★請輸入階碼位數: "<<endl;
cin>>stepcodebit;
cout<<"★請輸入尾數位數: "<<endl;
cin>>mantissabit;
cout<<endl;
string s1;// stepcode
string s2; //mantissa
int i;
while(1) //first number
{
if(i=input_stepcode(s1)==1)
break;
}
// mantissa input
while(1)
{
if(i=input_mantissa(s2)==1)
break;
}
cout<<"★請輸入運算符(+ or -): ";
cin>>operation;
while(operation!="+"&&operation!="-")
{
cout<<"◎請重新輸入!";
cout<<"★請輸入運算符(+ or -): ";
cin>>operation;
}
// number 2 input
string s3;
string s4;
while(1) //first number
{
if(i=input_stepcode(s3)==1)
break;
}
// mantissa input
while(1)
{
if(i=input_mantissa(s4)==1)
break;
}
//if mantissa is zero
if(s2.find("1",0)==string::npos)
{
result.insert(0,"階碼:");
result.insert(result.length(),s3);
result.insert(result.length(),"尾數:");
result.insert(result.length(),s4);
cout<<result<<endl;
return 0;
}
if(s4.find("1",0)==string::npos)
{
result.insert(0,"階碼:");
result.insert(result.length(),s1);
result.insert(result.length(),"尾數:");
result.insert(result.length(),s2);
cout<<result<<endl;
return 0;
}
// construct number 1
int jsign;
int wsign;
if(s1.substr(0,1)=="-")
{
jsign=1;
s1.erase(0,1);
}
else
jsign=0;
// deal mantissa
if(s2.substr(0,1)=="-")
{
s2=s2.substr(3,s2.length()-3);
wsign=1;
}
else
{
s2=s2.substr(2,s2.length()-2);
wsign=0;
}
fnumber op1(stepcodebit,mantissabit,jsign,s1,wsign,s2);
// construct number 2
if(s3.substr(0,1)=="-")
{
jsign=1;
s1.erase(0,1);
}
else
jsign=0;
// deal mantissa
if(s4.substr(0,1)=="-")
{
if(operation=="+")
wsign=1;
else
wsign=0;
s4=s4.substr(3,s4.length()-3);
}
else
{
if(operation=="+")
wsign=0;
else
wsign=1;
s4=s4.substr(2,s4.length()-2);
}
fnumber op2(stepcodebit,mantissabit,jsign,s3,wsign,s4);
///begin operating
// rectify_stepcode
int d;
d=op1.rectify_stepcode(op2);
if(d==1)
{
result.insert(0,"階碼:");
string temp=op2.stepcode;
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
result.insert(result.length(),"尾數:");
temp=op2.mantissa;
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
cout<<result<<endl;
return 0;
}
else if(d==2)
{
result.insert(0,"階碼:");
string temp=op1.stepcode;
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
//result.insert(result.length(),op1.stepcode);
result.insert(result.length(),"尾數:");
temp=op1.mantissa;
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
cout<<result<<endl;
return 0;
}
//mantissa addition
fnumber op3=op1.mantissaaddition(op2);
//standardize
d=op3.standardize();
if(d==1)
{
result="+∞";
cout<<result<<endl;
return 0;
}
else if(d==-1)
{
result="-∞ ";
cout<<result<<endl;;
return 0;
}
string temp=op3.stepcode;
result.insert(0,"階碼:");
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
result.insert(result.length(),"尾數:");
temp=op3.mantissa;
if(temp.substr(0,1)=="1")
{
reverseadd(temp);
result.insert(result.length(),"-");
}
result.insert(result.length(),temp.substr(2,temp.length()-2));
cout<<result<<endl;
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -