各位先生们女士们,你们有没有过因为数字太大的缘故算不出数的情况呢???
今天我隆重退出一款老少皆宜的 高精度计算器 !!!!!
同志们,刚刚我打广告入迷了,现在回归正题啦!!!
这期文章我带来了我自治的一个高精度计算器,
不过只能算加法和乘法………………不过也没什么大碍啦!
那么现在……上代码!!!!
加法版:
#include <iostream>
#include <string>
using namespace std;
int A[1010], B[1010], sum[1010];
// 把字符串s存储的整数按照大整数的格式存入数组a中
void s2BIG(string s, int a[])
{
int la = s.length();
for (int i = 1; i <= la; i++)
{
// 数组a和十进制写法是反过来存储的
a[i] = s[la - i] - '0';
}
a[0] = la; // 大整数的位数保存在a[0]
}
// 将x+y的结果存入数组z中
void addBIG(int x[], int y[], int z[])
{
z[0] = max(x[0], y[0]);
for (int i = 1; i <= z[0]; i++)
z[i] = x[i] + y[i];
for (int i = 1; i <= z[0]; i++)
{
z[i + 1] += z[i] / 10;
z[i] %= 10;
if (z[z[0] + 1]) z[0]++;
}
}
// 用一行输出a记录的大整数(包括换行符)
void printBIG(int a[])
{
int la = a[0]; // 获得a的位数
for (int i = la; i >= 1; i--) // 从高位输出到低位
{
cout << a[i];
}
cout << endl; // 最后要输出一个换行
}
int main()
{
string a, b;
cin >> a >> b;
return 0;
}
乘法版:
#include <iostream>
#include <string>
using namespace std;
int A[1010], mul[1010];
// 把字符串s存储的整数按照大整数的格式存入数组a中
void s2BIG(string s, int a[])
{
int la = s.length();
for (int i = 1; i <= la; i++)
{
// 数组a和十进制写法是反过来存储的
a[i] = s[la - i] - '0';
}
a[0] = la; // 大整数的位数保存在a[0]
}
// 用一行输出a记录的大整数(包括换行符)
void printBIG(int a[])
{
int la = a[0]; // 获得a的位数
for (int i = la; i >= 1; i--) // 从高位输出到低位
{
cout << a[i];
}
cout << endl; // 最后要输出一个换行
}
void mulBIG(int x[], int y, int z[])
{
z[0] = x[0];
for (int i = 1; i <= z[0]; i++) // 每位求积
{
z[i] = x[i] * y;
}
for (int i = 1; i <= z[0]; i++)
{
z[i + 1] += z[i] / 10;
z[i] %= 10;
if(z[z[0] + 1] > 0) z[0]++; //额外判定最高位进位
}
}
int main()
{
string a;
cin >> a;
int b;
cin >> b;
s2BIG(a, A);
mulBIG(A, b, mul);
printBIG(mul);
return 0;
}
呵呵,代码都带来了,还不快来试试看?!
同志们我们下去文章见!!!!!!!!!!!!!
本站作者已申明原创,禁止转载!
文章内容属作者个人观点,不代表本站立场,如有侵权立删。