求只需要加减乘除和带括号的四则运算C++程序
网上很多源码,搜下吧,上面的个简单的
天啊!撞枪口上了!我前几天才做出来的
#include<stdio.h>
#include<conio.h>
void calprint(int);
int cala(int x,int y,int z) /*选择运算加减乘除,便于循环*/
{ int a;
if(z==0)
{ a=x+y;
}
else if(z==1)
{ a=x-y;
}
else if(z==2)
{ a=x*y;
}
else if(z==3)
{ a=x/y;
}
return a;
}
void main() /*主函数*/
{ int ia,ib,ic,id,ie,ig,ih,ii,im;
int inum[4]; /*将四个数存在数组里,便于循环*/
int itatle;
printf("input the numbers:\n");
for(ia=0;ia<4;ia++)
{ scanf("%d",&inum[ia]);
}
for(ia=0;ia<4;ia++) /*判断第一层运算方法*/
{ for(ib=0;ib<4;ib++) /*判断第二层运算方法*/
{ for(ic=0;ic<4;ic++) /*判断第三层运算方法*/
{ for(id=0;id<4;id++) /*循环数组里的数字*/
{ for(ie=0;ie<4;ie++)
{ for(ig=0;ig<4;ig++)
{ for(ih=0;ih<4;ih++)
{ itatle=0;
if(ic==0||ic==1||ic==2||((ic==3)&&(inum[ih]>0)&&(inum[ig]%inum[ih]==0))) /*ic=3时,除数不能为零*/
{ ii=cala(inum[ig],inum[ih],ic);
if(ib==0||ib==1||ib==2||((ib==3)&&(ii>0)&&(inum[ie]%ii==0))) /*ib=3时,除数不能为零*/
{ im=cala(inum[ie],ii,ib);
if(ia==0||ia==1||ia==2||((ia==3)&&(im>0)&&(inum[id]%im==0))) /*ia=3时,除数不能为零*/
{ itatle=cala(inum[id],im,ia); /*第一种运算格式:a,(b,(c,d))
if((itatle==24)&&(unequals(id,ie,ig,ih)==0)) /*判断结果为24并且数组下标都不相等的时候*/
{ printf("24 = %d",inum[id]);
calprint(ia);
if((ia>=2)&&(ib<=1)||(ia==ib))
{ printf("( ");
}
printf("%d",inum[ie]);
calprint(ib);
if((ib>=2)&&(ic<=1)||(ib==ic)) /*判断加开括号*/
{ printf("( ");
}
printf("%d",inum[ig]);
calprint(ic);
printf("%d",inum[ih]);
if((((ia>=2)&&(ib<=1)||(ia==ib))&&!((ib>=2)&&(ic<=1)||(ib==ic)))||(!((ia>=2)&&(ib<=1)||(ia==ib))&&((ib>=2)&&(ic<=1)||(ib==ic))))
{ printf(" )\n");
}
else if(((ia>=2)&&(ib<=1)||(ia==ib))&&((ib>=2)&&(ic<=1)||(ib==ic))) /*判断加关括号*/
{ printf(" ) )\n");
}
else
{ printf("\n");
}
break;
}
}
}
}
if((ia==0||ia==1||ia==2||((ia==3)&&(inum[ie]>0)&&(inum[id]%inum[ie]==0)))&&(itatle!=24))
{ if(ib==0||ib==1||ib==2||((ib==3)&&(inum[ih]>0)&&(inum[ie]%inum[ih]==0)))
{ ii=cala(inum[id],inum[ie],ia);
im=cala(inum[ig],inum[ih],ib);
if(ic==0||ic==1||ic==2||((ic==3)&&(im>0)&&(ii%im==0)))
{ itatle=cala(ii,im,ic); /*第二种运算格式:(a,b),(c,d)*/
if((itatle==24)&&(unequals(id,ie,ig,ih)==0))
{ printf("24 = ");
printf("( %d",inum[id]);
calprint(ia);
printf("%d )",inum[ie]);
calprint(ic);
printf("( %d",inum[ig]);
calprint(ib);
printf("%d )\n",inum[ih]);
break;
}
}
}
}
else
{ continue;
}
}
}
}
}
}
}
}
}
void calprint(int y) /*加减乘除符号输出*/
{ if(y==0)
{ printf(" + ");
}
else if(y==1)
{ printf(" - ");
}
else if(y==2)
{ printf(" * ");
}
else if(y==3)
{ printf(" / ");
}
}
int uneaqual(int ia,int ib) /*判断两个数是否相等*/
{ int is;
if(ia!=ib)
{ is=0;
}
else
{ is=1;
}
return is;
}
int unequals(int ia,int ib,int ic,int id) /*判断四个数是否相等*/
{ int it;
if((uneaqual(ia,ib)==0)&&(uneaqual(ia,ic)==0)&&(uneaqual(ia,id)==0)&&(uneaqual(ib,ic)==0)&&(uneaqual(ib,id)==0)&&(uneaqual(ic,id)==0))
{ it=0;
}
else
{ it=1;
}
return it;
}
缺点是不能自动判断什么时候可以消去括号,输出结果时会出现24=(a×b)+(c×d)的情况
以上是用turbo c做出来的,turbo c不支持输出汉字
- 站长提醒大家:以上内容,未识真伪,仅供参考。理性上网,以免过度。谨慎广告,危及钱财。