C++的无符号整数类型表示范围有限,能表示的十进制无符号整数不超过 20位。编写程序,实现超过 20 位的无符号整数的加法和乘法运算。 要求程序读入文本文件 input. txt,计算其中的表达式的运算结果,并将结果输出到文本文件 output.txt 中。
时间: 2023-12-14 17:39:58 浏览: 30
这个问题需要用到大数运算的知识,可以使用字符串来表示超过20位的无符号整数。下面给出一个C++的实现示例。
```c++
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
// 大数加法
string add(string a, string b){
string res="";
int carry=0;
int i=a.size()-1, j=b.size()-1;
while(i>=0 || j>=0){
int sum=carry;
if(i>=0) sum+=a[i--]-'0';
if(j>=0) sum+=b[j--]-'0';
res+=(sum%10)+'0';
carry=sum/10;
}
if(carry!=0) res+=carry+'0';
reverse(res.begin(), res.end());
return res;
}
// 大数乘法
string multiply(string a, string b){
if(a=="0" || b=="0") return "0";
int lenA=a.size(), lenB=b.size();
string res(lenA+lenB, '0');
for(int i=lenA-1; i>=0; i--){
for(int j=lenB-1; j>=0; j--){
int num=(a[i]-'0')*(b[j]-'0')+(res[i+j+1]-'0');
res[i+j+1]=num%10+'0';
res[i+j]+=num/10;
}
}
if(res[0]=='0') res=res.substr(1);
return res;
}
int main(){
ifstream fin("input.txt");
ofstream fout("output.txt");
string exp;
fin>>exp;
string num1="", num2="";
char op=' ';
for(int i=0; i<exp.size(); i++){
if(exp[i]>='0' && exp[i]<='9'){
if(op==' ') num1+=exp[i];
else num2+=exp[i];
}
else op=exp[i];
}
string res="";
if(op=='+') res=add(num1, num2);
else if(op=='*') res=multiply(num1, num2);
fout<<res<<endl;
fin.close();
fout.close();
return 0;
}
```
这个程序可以读入输入文件 `input.txt` 中的表达式,提取出两个数字和运算符,并且调用相应的大数加法或乘法函数计算结果,最后将结果输出到输出文件 `output.txt` 中。