?? main.cpp
字號:
#include"BigIntcpp.cpp"
#include"Prime.cpp"
string help();
string input(char *str);
BigInt VAR[20],EXP[20];
int markvar=0,markexp=0;
bool IsV=0;
bool IsE=0;
string domain(int select,char *str)
{
//CString stra="\0";
//SetDlgItemText(IDC_EDIT1,stra);
//char *str=new char[100000];
char *str1=new char[100000];
char *str2=new char[100000];
char *str3=new char[100000];
BigInt o1,o2,o3,result,remainder,Ones,Full;
string p1,p2,p3;
bool BOOL;
char c[10];
int i=0,inverse=0;
string one="1",helpfile,inputvar;
Ones.loadDEC(one);
char varbuf[3];
char yes;
// cout<<endl<<endl<<" 具體操作請看幫助文件"<<endl<<endl<<endl;
//restart:
IsV=false;
IsE=false;
// strcpy(str,"\0");
strcpy(str1,"\0");
strcpy(str2,"\0");
strcpy(str3,"\0");
strcpy(varbuf,"\0");
char tmp[5];
i=0;inverse=0;
// cout<<endl<<endl<<" 提供的操作類型"<<endl<<endl;
// cout<<endl<<endl<<" 1 雙操作數運算 + - * / % ^ == != > < <<= >>= ~(最大公約數)"<<endl;
// cout<<endl<<endl<<" 2 單操作數運算 ++ -- "<<endl;
// cout<<endl<<endl<<" 3 三操作數運算 模+ 模- 模* 模/ 模^ 求逆-"<<endl;
// cout<<endl<<endl<<" v 操作數輸入(以-1結束)"<<endl;
//cout<<endl<<endl<<" h 幫助文件與輸入例子"<<endl;
// cout<<endl<<endl<<endl<<"請輸入你需要的操作:";
//int select;
//char sel[500];
//cin>>sel;
/*
if(!strcmp(sel,"1"))select=1;
else if(!strcmp(sel,"2"))select=2;
else if(!strcmp(sel,"3"))select=3;
else if(!strcmp(sel,"h"))select=4;
else if(!strcmp(sel,"v"))select=5;
else
{
cout<<endl<<endl<<"選擇無效,請重新輸入"<<endl<<endl;
goto restart;
}
*/
switch (select)
{
case 2:
{
// cout<<endl<<endl<<"請輸入操作計算式子 :"<<endl<<endl;
// cin>>str;
int j=0;
if(str[i]=='v'||str[i]=='V')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
int varint=atoi(varbuf);
o1=VAR[varint];
}
else if(str[i]=='e'||str[i]=='E')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
int varint=atoi(varbuf);
o1=EXP[varint];
}
else
{
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))str1[i]=str[i++];
else break;
}
str1[i]='\0';
p1=str1;
o1.loadDEC(p1);
}
j=0;
while(i<strlen(str))
{
if((str[i]<int('0')||str[i]>int('9'))&&str[i]!='v'&&str[i]!='V'&&str[i]!='e'&&str[i]!='E')c[j++]=str[i++];
else break;
}
c[j]='\0';
j=0;
if(str[i]=='v'||str[i]=='V')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
int varint=atoi(varbuf);
o2=VAR[varint];
}
else if(str[i]=='e'||str[i]=='E')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
int varint=atoi(varbuf);
o2=EXP[varint];
}
else
{
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))str2[j++]=str[i++];
else break;
}
str2[j]='\0';
p2=str2;
//cout<<str1<<c<<str2<<endl;
o2.loadDEC(p2);
}
cout<<endl<<endl<<str;
if(str[strlen(str)-1]!='=')cout<<"=";
switch(c[0])
{
case '+':
result=o1+o2;
// //cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
// //cin>>yes;
// //if(yes=='y'||yes=='Y')
// {
EXP[markexp%20]=result;
// //cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
// }
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '-':
result=o1-o2;
// //cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
// //cin>>yes;
// //if(yes=='y'||yes=='Y')
// {
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
// }
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '*':
result=o1*o2;
// //cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
// //cin>>yes;
// //if(yes=='y'||yes=='Y')
// {
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
// }
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '/':
result=Remainder(o1,o2,remainder);
//cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
//cin>>yes;
//if(yes=='y'||yes=='Y')
{
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"..."+remainder.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '%':
result=o1%o2;
//cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
//cin>>yes;
//if(yes=='y'||yes=='Y')
{
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '^':
{
Full.setFull(); //因為要調用model乘,所以把mod(n)中的n設為最大
// Full.outputDEC();
result=BImodexp(o1,o2,Full);
//cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
//cin>>yes;
//if(yes=='y'||yes=='Y')
{
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
}
case '~':
result=BIgcd(o1,o2);
//cout<<endl<<"是否要存儲結果? "<<result.outputDEC()<<endl;
//cin>>yes;
//if(yes=='y'||yes=='Y')
{
EXP[markexp%20]=result;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
_itoa((markexp-1)%20,tmp,10);
return result.outputDEC()+"已設置EXP"+tmp+"="+EXP[(markexp-1)%20].outputDEC();
break;
case '>':
if(!strcmp(c,">"))
{
BOOL=o1>o2;
if(BOOL)return "1";else return "0";
break;
}
else if(!strcmp(c,">>="))
{
short iBit;
iBit=(short)atoi(str2);
o1>>=iBit;
{
EXP[markexp%20]=o1;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
return result.outputDEC();;
// cout<<o1.outputDEC()<<endl;
break;
}
case '<':
{
if(!strcmp(c,"<"))
{
BOOL=o2>o1;
if(BOOL)return "1";else return "0";
break;
}
else if(!strcmp(c,"<<="))
{
short iBit;
iBit=(short)atoi(str2);
o1<<=iBit;
{
EXP[markexp%20]=o1;
//cout<<endl<<"已存儲結果為:EXP"<<markexp<<"="<<result.outputDEC()<<endl;
markexp++;
}
return result.outputDEC();;
// cout<<o1.outputDEC()<<endl;
break;
}
}
case '=':
if(!strcmp(c,"=="))
{
BOOL=o1==o2;
if(BOOL)return "1";else return "0";
break;
}
case '!':
if(!strcmp(c,">"))
BOOL=o1!=o2;
if(BOOL)return "1";else return "0";
break;
default:return "沒定義這個操作符";
}
break;
}//case 1
case 1:
{
// cout<<endl<<endl<<"請輸入操作計算式子 :"<<endl<<endl;
// cin>>str;
int j=0,varint,n;
__int64 nn;
if(str[i]=='v'||str[i]=='V')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
varint=atoi(varbuf);
o1=VAR[varint];
IsV=true;
}
else if(str[i]=='e'||str[i]=='E')
{
i+=3;
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))varbuf[j++]=str[i++];
else break;
}
varbuf[j]='\0';
varint=atoi(varbuf);
o1=EXP[varint];
IsE=true;
}
else
{
while(i<strlen(str))
{
if(str[i]>=int('0')&&str[i]<=int('9'))str1[i]=str[i++];
else break;
}
str1[i]='\0';
p1=str1;
o1.loadDEC(p1);
}
j=0;
while(i<strlen(str))
{
if((str[i]<int('0')||str[i]>int('9'))&&str[i]!='=')c[j++]=str[i++];
else break;
}
c[j]='\0';
cout<<endl<<endl<<str;
if(str[strlen(str)-1]!='=')cout<<"=";
switch(c[0])
{
case '+':
o1++;
if(IsV)
VAR[varint]=o1;
if(IsE)
EXP[varint]=o1;
return o1.outputDEC();
break;
case '-':
o1--;
if(IsV)
VAR[varint]=o1;
if(IsE)
EXP[varint]=o1;
return o1.outputDEC();
break;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -