基于EasyX的c++图形化计算器
  • 板块灌水区
  • 楼主Lijiangjun4
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/3 22:39
  • 上次更新2024/10/4 09:36:13
查看原帖
基于EasyX的c++图形化计算器
1274736
Lijiangjun4楼主2024/10/3 22:39

闲着没事用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;
}

附:easyX安装教程(Devc++)easyX使用教程

2024/10/3 22:39
加载中...