📄 digui.cpp
字号:
//文法:S->I.I,I->0I|1I|2I|3I|4I|5I|6I|7I|8I|9I|0|1|2|3|4|5|6|6|7|8|9
//转化为LL(1)文法:S->I.I,I->0B|1B|2B|3B|4B|5B|6B|6B|7B|8B|9B,B->I|ε
#include <math.h>
#include <iostream.h>
#include <string.h>
char prog[80];
char sym;
int f,d,i=0,b=0;
int flag=1,flag_dot=0;
void B();
int sum1=0,sum2=0;
char str1[80],str2[80],str3[80];
void scaner(){
cout<<"请输入符号串:"<<endl;
cin.getline(prog,80);
}
void I(){
if(sym>='0'&&sym<='9')
{ if(flag_dot==0)
sum1=sum1+sym-'0';
else
sum2=sum2+sym-'0';
sym=prog[i++];
B();}
}
void B(){
if(sym>='0'&&sym<='9')
{if(flag_dot==0)sum1*=10;
else sum2*=10;
I();
}
else if(sym!='$'&&sym!='.')
{cout<<"error!"<<endl;
b=1;
}
}
void S(){
I();
if(sym=='.'){
sym=prog[i++];
flag_dot=1;
}
else
{cout<<"error!";
b=1;
}
I();
}
void digui(){
while(i<80){
sym=prog[i++];
S();
if(sym=='$'&&b==0){
cout<<"success!"<<endl;
flag=0;
break;}
else
{cout<<"fail!";
break;}
}
}
void dot(){
int j;
for(j=0;j<80;j++)
{
if(prog[j]=='.')
f=j;
if(prog[j]=='$')
{ d=j;
break;}
}
}
void change(){
int k,t,l,n,a;
double m;
t=sum1;
for(k=0;k<=79;k++){
if(t!=0){
if(t%2==0){
str1[k]='0';}
if(t%2==1){
str1[k]='1';}
}
t=(int)t/2;
if(t==0){n=k;
break;}
}
for(a=n;a>=0;a--){
str3[n-a]=str1[a];
}
str3[n+1]='\0';
m=sum2*pow(10,f-d+1);
for(l=0;l<10&&m;l++){
m*=2;
if(m>=1){
str2[l]='1';
m=m-1;
continue;
}
if(m<1){
str2[l]='0';
}
}
str2[l]='\0';
}
void main(){
scaner();
digui();
if(flag==0){
dot();
change();
}
cout<<str3<<"."<<str2<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -