编写程序,实现超过20位的无符号整数的加法和乘法运算。要求程序读入文本文件input.txt,计算其中的表达式的运算结果,并将结果输出到文本文件output.txt中。例如: 输入文件input.txt的内容 123456789012345678901234567890 + 123456789012345678901234567890 74795969103554554996215276693934490847811844274620 * 51 输出文件output.txt的内容 ( 123456789012345678901234567890 + 123456789012345678901234567890 = 246913578024691357802469135780 ) ( 74795969103554554996215276693934490847811844274620 * 51 = 3814594424281282304806979111390659033238404058005620 )(只能使用iostream,fstream,string数据库)在程序中使用静态链接方式。在编译时加上"-static-libgcc -static-libstdc++"选项。
时间: 2024-01-22 20:18:45 浏览: 155
以下是实现超过20位的无符号整数的加法和乘法运算的程序:
```
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
string add(string num1, string num2) {
string sum = "";
int carry = 0;
int i = num1.length() - 1, j = num2.length() - 1;
while (i >= 0 || j >= 0 || carry) {
int digit1 = i >= 0 ? num1[i] - '0' : 0;
int digit2 = j >= 0 ? num2[j] - '0' : 0;
int digitSum = digit1 + digit2 + carry;
carry = digitSum / 10;
sum = to_string(digitSum % 10) + sum;
i--;
j--;
}
return sum;
}
string multiply(string num1, int num2) {
string product = "";
int carry = 0;
for (int i = num1.length() - 1; i >= 0; i--) {
int digit = num1[i] - '0';
int digitProduct = digit * num2 + carry;
carry = digitProduct / 10;
product = to_string(digitProduct % 10) + product;
}
if (carry > 0) {
product = to_string(carry) + product;
}
return product;
}
int main() {
ifstream inputFile("input.txt");
ofstream outputFile("output.txt");
string line;
while (getline(inputFile, line)) {
int plusIndex = line.find("+");
int multiplyIndex = line.find("*");
if (plusIndex != string::npos) {
string num1 = line.substr(0, plusIndex);
string num2 = line.substr(plusIndex + 1);
string sum = add(num1, num2);
outputFile << "( " << num1 << " + " << num2 << " = " << sum << " )" << endl;
} else if (multiplyIndex != string::npos) {
string num1 = line.substr(0, multiplyIndex);
int num2 = stoi(line.substr(multiplyIndex + 1));
string product = multiply(num1, num2);
outputFile << "( " << num1 << " * " << num2 << " = " << product << " )" << endl;
}
}
inputFile.close();
outputFile.close();
return 0;
}
```
程序首先打开输入文件input.txt和输出文件output.txt,并逐行读取输入文件中的内容。对于每一行,程序检查是否有加号或乘号,如果有加号,则将两个数相加并输出结果,如果有乘号,则将第一个数乘以第二个数,并输出结果。
在加法运算中,程序使用了字符串模拟加法的方法,从字符串的末位开始逐位相加,并记录进位。在乘法运算中,程序将第一个数的每一位与第二个数相乘,并将结果逐位相加得到乘积。最后,程序关闭输入文件和输出文件,并返回0。
请注意,在编译时需要加上"-static-libgcc -static-libstdc++"选项,以使用静态链接方式。
阅读全文