大数运算 C++编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.大数计算器
大数是超过整数表示范围的整数,针对正整数运算,定义一个大数类,并编写两个大数类对象的加法和减法函数。
基本要求:
1)编写大数类对象的构造函数和输入输出函数。
2)编写大数类对象的加法和减法运算函数。
include <iostream>
#include <string>
#define MAX 1000
using namespace std;
// 将字符串转化成一个整数数组
void stoi(string str, int array[])
{
array[0] = str.length();
for(int i = 1; i <= str.length(); i++)
{
array[i] = str.at(str.length() - i) - '0';
}
}
// 输出大数
void dispbig(int array[])
{
for (int i = array[0]; i >=1 ; i--)
{
if (array[i] != 0) break;
}
if (i == 0) cout << 0 << endl;
for (int j = i; j >=1 ; j--)
{
cout << array[j];
}
cout << endl;
}
// 大数加法
int * sumbig(int a[], int b[])
{
int *c = new int[MAX];
for (int k = 0; k < MAX; k++) c[k] = 0;
int flag = 0;
for (int i = 1; i <= ((a[0] > b[0]) ? a[0] : b[0]); i++) {
c[i] = (flag + a[i] + b[i]) % 10;
flag = (flag + a[i] + b[i]) / 10;
}
if (flag)
{
c[i] = 1;
c[0] = i;
}
else c[0] = i - 1;
return c;
}
// 大数减法,
int * subbig(int a[], int b[])
{
int *c = new int[MAX];
for (int k = 0; k < MAX; k++) c[k] = 0;
int flag = 0;
for (int i = 1; i <= ((a[0] > b[0]) ? a[0] : b[0]); i++) {
c[i] = (flag + 10 + a[i] - b[i]) % 10;
if (a[i] - b[i] < 0) flag = -1;
else flag = 0;
}
c[0] = i - 1;
return c;
}
void main()
{
string sa, sb;
cout << "输入两个大数:" << endl;
cin >> sa >> sb;
int a[MAX] = {0}, b[MAX] = {0}; stoi(sa, a);
stoi(sb, b);
cout << "两个大数分别为:" << endl; dispbig(a);
dispbig(b);
int *d = subbig(a, b);
int *c = sumbig(a, b);
cout << "两个大数之和为: " << endl; dispbig(c);
cout << "两个大数之差为: " << endl; dispbig(d);
}。