闲着没事用easyx做了一个计算器小程序,高精度,可以进行括号四则运算(乘方还在开发中),下载链接在这里。

希望大家提提意见,帮忙找一找 bug。
代码最高难度的就是高精度小数除法(精确到小数点后20位),这一部分的代码粘贴如下:
//compare(string a,string b)比较两个字符串代表数字大小,a>b返回1,a==b返回0,a<b返回-1
string Calc::chu(string a,string b)
{
string ans;
int pa=a.size(),pb=b.size();
for(int i=0;i<a.size();i++)
{
if(a[i]=='.')
{
pa=i;
break;
}
}
for(int i=0;i<b.size();i++)
{
if(b[i]=='.')
{
pb=i;
break;
}
}
int ca=0,cb=0;
if(pa!=a.size()) ca=a.size()-pa-1;
if(pb!=b.size()) cb=b.size()-pb-1;
// cout<<ca<<' '<<cb<<'\n';
a.erase(pa,1);
b.erase(pb,1);
if(ca>cb)
{
for(int i=1;i<=ca-cb;i++)
{
b+='0';
}
}
else
{
for(int i=1;i<=cb-ca;i++)
{
a+='0';
}
}
for(int i=1;i<=20;i++)
{
a+='0';
}
string s=a.substr(0,b.size()-1);
for(int i=b.size()-1;i<=a.size()-1;i++)
{
int t=0;
s+=a[i];
while(compare(s,b)>=0)
{
t++;
s=jian(s,b);
}
ans+=char(t+'0');
if(compare(s,"0")==0) s="";
}
while(ans.size()<20) ans='0'+ans;
ans.insert(ans.end()-20,'.');
if(ans[0]=='.') ans='0'+ans;
// cout<<ans<<'\n';
for(int i=ans.size()-1;i>=0;i--)
{
// cout<<ans[i]<<'\n';
if(ans[i]=='0') ans.erase(ans.begin()+i);
else break;
}
return ans;
}