一 概念
高精度数,俗称“大数”。在一般科学计算中,会经常算到小数点后几百位甚至更多,当然也可能是几千亿几百亿的大数字。一般这类数字可通称为高精度数。高精度数由于位数太长,无法在计算机中正常存储,于是,可以将这个数字拆开,拆成一位一位的,或者是四位四位的存储到一个数组中,用一个数组去表示一个数字。
二 存储
为了控制高精度数的每一位数字在数组中存储时只占一个位置,一般采用char类型来存储高精度数字:
例如: char[20]=“1234567890123456789” 表示为:
存储过程:
1、定义char数组用以存储高精度数
2、将高精度数输入
3、将输入的char型字符转换为int型
4、将转换后的数输出
三 加法计算
1、定义char数组存储高精度数并输入
2、将两个加数倒序排列并转换为int型
3、对应位相加(注意处理进位)
4、处理最高位进位问题
5、倒序输出相加后的和
参考代码:
#include<iostream>
#include<cstring>
const int N = 1000;
using namespace std;
int main()
{
// 两个加数长度不同 且考虑进位
char X[N] = {}, Y[N] = {};
int a[N] = {}, b[N] = {};
// 存储结果
int s[N] = {};
// 存储进位
int c[N] = {0};
cout << "please input:"<< endl;
cin >> X >> Y;
int lenx = strlen(X);
int leny = strlen(Y);
// 以较长的为基准
int len = (lenx > leny ? lenx : leny);
// 1 转为整型 倒序存储
for (int i = 0; i < lenx;i++)
{
a[lenx - 1 - i] = X[i] - 48;
}
for (int i = 0; i < leny;i++)
{
b[leny - 1 - i] = Y[i] - 48;
}
// 2求进位 保留十位 最高位的进位 其实 不用求
// 5+5 = 10 5555 9999
// 9+9 = 18 +5555 9
// 11110 11110
for (int i = 0; i < len;i++)
{
if((a[i] + b[i])>=10 || (a[i] + b[i] + c[i])>=10)
c[i + 1] = 1;
else
c[i + 1] = 0;
}
// 最高位进位算出来了 没用上 因为长度超出了
for (int i = 0; i <= len;i++)
cout << c[i];
cout.put('\n');
// 3 求和 倒序相加 保留个位
for (int i = 0; i < len; i++)
{
if(i<len-1)
{
s[i] = (a[i] + b[i] + c[i])%10;
}
else
s[i] = a[i] + b[i] + c[i];
// 此为最高位
}
// 4 倒序输出
for (int i = 0; i < len;i++)
{
cout << s[len - 1 - i];
}
return 0;
}
谢谢!