Run ID 作者 问题 语言 测评结果 Time Memory 代码长度 提交时间
2568 孙浚轩 [在线测评解答教程] A+B Problem C++ Compile Error 0 MS 0 KB 9039 2024-01-13 17:12:09

Tests(0/0):


Code:

#include<iostream> #include<iomanip> #include<cmath> using namespace std; int gcd(long long x,long long y){ long long z=x%y; while(z!=0){ x=y; y=z; z=x%y; } return y; } //最大公因数 int lcm(long long x,long long y){ return x*y/gcd(x,y); } //最小公倍数 int fac(long long x,long long y){ int i=x-y; while(i>1){ x*=i; i-=y; } return x; } //阶乘 可支持多阶阶乘(多阶阶乘:x!y=x*(x-y)*(x-2y)*(x-3y)*...) double log_(double x, double y) { return log(x)/log(y); } //以x为底数y为对数的对数函数 int fp(double x){ int p=0; double m=x; while(m!=round(m)){ m*=10; p++; } return p; } //找出应当保留多少位小数 void rtno(double x){ cout<<fixed<<setprecision(fp(x))<<x; } //一个数保留适当位数的小数后输出 double cot(double x){ return 1.0/tan(x); } double sec(double x){ return 1.0/cos(x); } double csc(double x){ return 1.0/sin(x); } double acot(double x){ return atan(1.0/x); } double asec(double x){ return acos(1.0/x); } double acsc(double x){ return asin(1.0/x); } double coth(double x){ return 1.0/tanh(x); } double sech(double x){ return 1.0/cosh(x); } double csch(double x){ return 1.0/sinh(x); } //三角函数,反三角函数,双曲三角函数的余切,正割,余割 int main(){ char cal; cout<<"科学计算器(s)"<<endl<<"普通计算器(+ - * / %)(o)"<<endl<<"方程计算器(一元一,二,三次)(e)"; cin>>cal; if(cal=='s'){ double a,b,n; string so; string aso[24]={"p","nt","lg","fac","sin","cos","tan","cot","sec","csc","asin","acos","atan","acot","asec","acsc","sinh","cosh","tanh","coth","sech","csch","gcd","lcm"}; cout<<"运算:"<<endl; cout<<"(先输入运算方式,提示出来后再输入参与运算的数)"<<endl; cout<<"乘方:p"<<" "<<"开方:nt"<<" "<<"对数:lg"<<" "<<"阶乘:fac"<<endl; cout<<"三角函数:"<<endl<<"sin / cos / tan / cot / sec / csc"<<endl; cout<<"反三角函数:"<<endl<<"asin / acos / atan / acot / asec / acsc"<<endl; cout<<"双曲三角函数:"<<endl<<"sinh / cosh / tanh / coth / sech / csch"<<endl; cout<<"最大公因数:gcd 最小公倍数:lcm"<<endl; cin>>so; int d=0; for(int i=0;i<24;i++){ if(so==aso[i]){ d=1; if(i<=1) cout<<"请输入底数,然后输入指数(底数=实数&指数=实数):"; else if(i==2) cout<<"请输入底数,然后输入对数(底数=实数&对数=实数):"; else if(i>=4&&i<=21) cout<<"请输入一个实数:"; else if(i==3||i>=22) cout<<"请输入两个整数:"; cout<<endl<<"若输入为非实数将输出随机数"; if(i<=2) cin>>a>>n; else if(i==3||i>=22){ cin>>a>>b; if(b<1&&i==3){ cout<<"错误:输入小于1"; return 0; } if(floor(a)!=a||floor(b)!=b){ cout<<"错误:输入为非整数"; return 0; } } else cin>>a; if(i>=4&&i<=21) a=a*(M_PI/180); if(so=="p") rtno(pow(a,n)); else if(so=="nt") rtno(pow(a,1/n)); else if(so=="lg") rtno(log_(a,n)); else if(so=="fac") cout<<fac(a,b); else if(so=="sin") rtno(sin(a)); else if(so=="cos") rtno(cos(a)); else if(so=="tan") rtno(tan(a)); else if(so=="cot") rtno(cot(a)); else if(so=="sec") rtno(sec(a)); else if(so=="csc") rtno(csc(a)); else if(so=="asin") rtno(asin(a)); else if(so=="acos") rtno(acos(a)); else if(so=="atan") rtno(atan(a)); else if(so=="acot") rtno(acot(a)); else if(so=="asec") rtno(asec(a)); else if(so=="acsc") rtno(acsc(a)); else if(so=="sinh") rtno(sinh(a)); else if(so=="cosh") rtno(cosh(a)); else if(so=="tanh") rtno(tanh(a)); else if(so=="coth") rtno(coth(a)); else if(so=="sech") rtno(sech(a)); else if(so=="csch") rtno(csch(a)); else if(so=="gcd") cout<<gcd(a,b); else if(so=="lcm") cout<<lcm(a,b); } } if(d==0) cout<<"错误:未知的运算"; } else if(cal=='o'){ double a,b; char op; cout<<"请输入:a op(+ - * / %) b"<<endl; cout<<"若输入为非实数将输出随机数"; cin>>a>>op>>b; switch(op){ case '+': rtno(a+b); break; case '-': rtno(a-b); break; case '*': rtno(a*b); break; case '/': if(b==0) cout<<"错误:除数不能为0"; else rtno(a/b); break; case '%': if(b==0) cout<<"错误:取余数时除数不能为0"; else rtno(a-b*floor(a/b)); break; default: cout<<"错误:未知的操作符"; return 0; } } else if(cal=='e'){ int p; double a,b,c,d; cout<<"请输入一元(1/2/3)次方程"; cin>>p; switch(p){ case 1: cout<<"请输入一次项系数,常数项(a,b)"<<endl; cout<<"若输入为非实数将输出随机数"; cin>>a>>b; if(a==0){ if(b==0) cout<<0; else cout<<"不成立"; } else rtno(-b/a); break; case 2: cout<<"请输入二次项系数,一次项系数,常数项(a,b,c)"<<endl; cout<<"若输入为非实数将输出随机数"; cin>>a>>b>>c; double delta2=b*b-4*a*c; if(delta2>=0){ if(delta2==0){ cout<<"唯一实数解:"<<endl; rtno(-b/(2*a)); } else{ cout<<"两个实数解:"<<endl; rtno((-b+sqrt(delta2))/(2*a)); cout<<" "; rtno((-b-sqrt(delta2))/(2*a)); } } else cout<<"无实数解"; break; case 3: cout<<"一元三次方程为未完全体,无法输出所有实数解,只能在有三个实数根时逼近某一个根,若只有一个实数解,只能说明有没有复数解"<<endl; cout<<"请输入三次项系数,二次项系数,一次项系数,常数项(a,b,c,d)"<<endl; cout<<"若输入为非实数将输出随机数"; cin>>a>>b>>c>>d; if(a==0){ cout<<"错误:非一元三次方程"<<endl; break; } double delta3=b*b-4*a*c; if(delta3>=0){ if(delta3==0) cout<<"一个实数解"; else{ cout<<"三个实数解:"<<endl; rtno((-b+cbrt(delta3))/(3*a)-(cbrt(delta3))/(3*a)); cout<<",..."; } } else cout<<"一个实数解和两个复数解"; break; default: cout<<"错误:未知的方程"; break; } } else cout<<"错误:未知的计算器"; return 0; }


Run Info:

Main.cc: In function 'int main()':
Main.cc:245:18: error: jump to case label [-fpermissive]
             case 3:
                  ^
Main.cc:229:24: error:   crosses initialization of 'double delta2'
                 double delta2=b*b-4*a*c;
                        ^
Main.cc:267:13: error: jump to case label [-fpermissive]
             default:
             ^
Main.cc:254:24: error:   crosses initialization of 'double delta3'
                 double delta3=b*b-4*a*c;
                        ^
Main.cc:229:24: error:   crosses initialization of 'double delta2'
                 double delta2=b*b-4*a*c;
                        ^