C++问题:残缺计算器

来源:百度知道 编辑:UC知道 时间:2024/06/25 16:20:35
内容要求:
制作一个残缺的计算器,仅要求实现+-×的运算,而不需要进行÷运算。
界面要求:
首先程序询问使用者需要进行+-×哪一种运算,然后提示输入两个运算数并输出最终运算结果。
数据范围:
0<a,b<1020
示例:
请选择操作符(1.+ 2.- 3.×):1
请输入第一个操作数:12345678901234567890
请输入第二个操作数:23456789012345678901
计算结果:35802467913580246791
提示:
由于数据范围比较大,需要用数组储存数据并用循环结构实现运算,而不是用long型,为数组创建空间时要考虑运算结果的范围。
能不能不要这么复杂。。。只要做0~10^20之间的运算,帮忙修改一下吧,改好了再加100分给你

我这种已经是最简单的方法了,10^20用1TB的内存都表示不了。我又把你优化了一下,如果有不懂的地方可以找我。QQ714091042 加我时要回答问题的答案是“田军”。
#include<string>
#include<iostream>
#include<cctype>
using namespace std;
void reverse(string&s)//将字符串s倒置
{
string s1=s;
for(int i=s1.length()-1;i>=0;i--)
s[s1.length()-1-i]=s1[i];
}
void format(string&s)//格式化s,如000012格式化成12
{
while(1)
{
if(s[0]=='0'&&s.length()>1)
s.erase(0,1);
else break;
}
}
void format_in(string&s)//如果字符串s第一位是'-',就去掉
{
if(s[0]=='-') s=s.substr(1,s.length()-1);
}
//乘法是采用将被乘数与乘数的每一位相乘的方法,s1代表被乘数,k代表乘数的某位数字,place代表k是乘数的哪一位
void MUL(string s1,int k,int place,string&result)//将s1与k*10^place相乘
{
int carry=0,count=0;
for(int i=s1.length()-1;i>=0;i--)
{
int temp=(s1[i]-48)*k+carry;
if(place+count<=result.length())
{
int k1=temp+result[plac