0
已解决
@王子耀 看看这个代码
-----------------------------
经过1个星期的调试
飞速计算器1.34版终于出来了!
功能介绍:
可以输入四则运算和次方(小数是可以的)
会按照运算顺序计算,的数是小数(如果位数较多,可能会不精确)
**运算顺序**
1.次方(^)
2.乘,除(*,/)
3.加,减(+,-)
暂时还不能加括号,到暑假我会推出一个带括号的版本,大家拭目以待吧!
这是一次运行结果:
Please enter
请输入
1.257+1.234^5*1.35/1.078-1.83
=3.01036
Press Enter to retype
按回车键重新录入
由于编程平台有问题,输出的和DEVC++不一样,就只能用这个代码了:
#include<iostream>
#include<cstring>
#define clean (system("cls"))
#include<windows.h>
using namespace std;
string a,b;
double c[1005];
bool check(){
for(int i=0;i<b.size();i++){
if(b[i]=='+'||b[i]=='-'||b[i]=='*'||b[i]=='/'||b[i]=='^'){
return 1;
}
}
return 0;
}
int findc(){
for(int i=0;i<b.size();i++){
if(b[i]=='^'){
return i;
}
}
return -1;
}
int find_(){
for(int i=0;i<b.size();i++){
if(b[i]=='+'||b[i]=='-'){
return i;
}
}
return 0;
}
int findx(){
for(int i=0;i<b.size();i++){
if(b[i]=='*'||b[i]=='/'){
return i;
}
}
return -1;
}
double change(string s){
int l=0;
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='.'){
l=s.size()-1-i;
}
}
int f=1,idx=0;
for(int i=s.size()-1;i>=0;i--){
if(s[i]!='.'){
idx+=(s[i]-'0')*f;
f*=10;
}
}
if(l==0)return idx;
int t=10;
for(int i=1;i<l;i++)t*=10;
return idx*1.0/t;
}
string change2(int tx){
int b[105],l=0,x=tx;
while(x!=0){
l++;
b[l]=x%10;
x/=10;
}
string out="";
for(int i=l;i>=1;i--)out=out+char(b[i]+'0');
return out;
}
bool check2(string t){
for(int i=0;i<t.size();i++){
if(!((t[i]>='0'&&t[i]<='9')||t[i]=='+'||t[i]=='-'||t[i]=='*'||t[i]=='/'||t[i]=='.'||t[i]=='^')){
return 1;
}
}
return 0;
}
void wrong(){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//红色
cout<<"Input error\n输入错误";
Sleep(1500);
}
int main(){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//青色
cout<<"Welcome to the quick calculator!\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"欢迎使用飞速计算器!";
Sleep(2000);
clean;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"!";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//红色
cout<<"Only four operations and powers can be entered,no parentheses";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"!\n!";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);//红色
cout<<"只能输入四则运算和次方,不能输入括号";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"!\n";
Sleep(3000);
while(1){
clean;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//青色
cout<<"Please enter\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"请输入\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN | FOREGROUND_BLUE);//白色
cin>>a;
if(check2(a)){
wrong();
continue;
}
b="";
int go=-1;
int l=0;
for(int i=0;i<a.size();i++){
if(a[i]>='0'&&a[i]<='9'){
if(i>go){
l++;
int j;
for(j=i+1;j<a.size();j++){
if(a[j]=='+'||a[j]=='-'||a[j]=='*'||a[j]=='/'||a[j]=='^'){
j--;
break;
}
}
if(j==a.size())j--;
//cout<<i<<" "<<j<<"\n";
go=j;
string t=a.substr(i,j-i+1);
c[l]=change(t);
b=b+change2(l);
}
}
else if(a[i]!='.'){
b=b+a[i];
}
}
//cout<<b<<"\n";
bool con=0;
while(check()){
int u;
u=findc();
if(u==-1)u=findx();
if(u==-1)u=find_();
int j1,j2;
for(j1=u-1;j1>=0;j1--){
if(b[j1]=='+'||b[j1]=='-'||b[j1]=='*'||b[j1]=='/'||b[j1]=='^'){
j1++;
break;
}
}
if(j1==-1)j1=0;
for(j2=u+1;j2<b.size();j2++){
if(b[j2]=='+'||b[j2]=='-'||b[j2]=='*'||b[j2]=='/'||b[j2]=='^'){
j2--;
break;
}
}
if(j2==b.size())j2--;
string ta=b.substr(j1,u-j1),tb=b.substr(u+1,j2-u);
double t;
double t1=c[int(change(ta))],t2=c[int(change(tb))];
if(b[u]=='^'){
double tmp=t1;
int cs=t2;
if(cs!=t2){
con=1;
break;
}
for(int i=1;i<cs;i++){
tmp*=t1;
}
t=tmp;
}
if(b[u]=='+')t=t1+t2;
if(b[u]=='-')t=t1-t2;
if(b[u]=='*')t=t1*t2;
if(b[u]=='/')t=t1/t2;
b.erase(j1,j2-j1+1);
l++;
c[l]=t;
b.insert(j1,change2(l));
//cout<<b<<"\n";
}
if(con){
wrong();
continue;
}
cout<<"="<<c[int(change(b))]<<"\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN |FOREGROUND_BLUE);//青色
cout<<"Press Enter to retype\n";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED |FOREGROUND_GREEN);//黄色
cout<<"按回车键重新录入\n";
getchar();
getchar();
}
return 0;
}
如果有问题,欢迎在下方指出噢~
