编写程序,实现超过20位的无符号整数的加法和乘法运算。要求程序读入文本文件input.txt,计算其中的表达式的运算结果,并将结果输出到文本文件output.txt中。例如: 输入文件input.txt的内容 123456789012345678901234567890 + 123456789012345678901234567890 74795969103554554996215276693934490847811844274620 * 51 输出文件output.txt的内容 ( 123456789012345678901234567890 + 123456789012345678901234567890 = 246913578024691357802469135780 ) ( 74795969103554554996215276693934490847811844274620 * 51 = 3814594424281282304806979111390659033238404058005620 )(只能使用iostream,fstream,string数据库)在程序中使用静态链接方式。
时间: 2024-01-22 22:18:39 浏览: 69
以下是实现超过20位的无符号整数的加法和乘法运算的程序。它读取文本文件input.txt中的表达式,计算结果,并将结果输出到文本文件output.txt中。
```
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 将两个超过20位的无符号整数相加
string add(string s1, string s2) {
string res = "";
int carry = 0;
int len1 = s1.length(), len2 = s2.length();
for (int i = 1; i <= max(len1, len2); i++) {
int a = (i <= len1 ? s1[len1 - i] - '0' : 0);
int b = (i <= len2 ? s2[len2 - i] - '0' : 0);
int sum = a + b + carry;
res = to_string(sum % 10) + res;
carry = sum / 10;
}
if (carry > 0) {
res = to_string(carry) + res;
}
return res;
}
// 将一个超过20位的无符号整数乘以一个小于等于100的正整数
string multiply(string s, int n) {
string res = "";
int carry = 0;
int len = s.length();
for (int i = 1; i <= len; i++) {
int digit = s[len - i] - '0';
int product = digit * n + carry;
res = to_string(product % 10) + res;
carry = product / 10;
}
if (carry > 0) {
res = to_string(carry) + res;
}
return res;
}
int main() {
ifstream fin("input.txt");
ofstream fout("output.txt");
string line;
while (getline(fin, line)) {
int pos = line.find("+");
if (pos != string::npos) { // 加法运算
string s1 = line.substr(0, pos);
string s2 = line.substr(pos + 1);
string sum = add(s1, s2);
fout << "(" << s1 << " + " << s2 << " = " << sum << ")" << endl;
} else { // 乘法运算
pos = line.find("*");
string s = line.substr(0, pos);
int n = stoi(line.substr(pos + 1));
string product = multiply(s, n);
fout << "(" << s << " * " << n << " = " << product << ")" << endl;
}
}
fin.close();
fout.close();
return 0;
}
```
在这个程序中,我们使用了两个函数add和multiply来实现加法和乘法运算。这两个函数都接受一个字符串参数和一个整数参数,并返回一个字符串类型的结果。
在主函数中,我们首先打开输入文件和输出文件,然后逐行读取输入文件中的表达式,并对每个表达式进行计算。如果表达式中包含加号,则调用add函数进行加法运算;如果表达式中包含乘号,则调用multiply函数进行乘法运算。最后,将计算结果输出到输出文件中。
需要注意的是,在实现加法和乘法运算时,我们需要处理进位的情况。具体来说,在add函数中,我们使用一个变量carry来表示当前的进位值;在multiply函数中,我们同样使用一个变量carry来表示当前的进位值。
此外,需要注意的是,在计算乘法时,我们将超过20位的无符号整数s拆分成若干个小于等于20位的数字,然后分别计算这些数字与n的乘积,最后将所有乘积相加得到结果。这样可以避免使用大数乘法算法,简化代码实现。
阅读全文