0
点赞
收藏
分享

微信扫一扫

高精度算法详解(蒟蒻,轻喷,欢迎指正)



高精度算法详解

  • ​​1.前言​​
  • ​​2.内容​​
  • ​​1.高精度加法​​
  • ​​1.用普通数组实现​​
  • ​​2.用结构体实现​​
  • ​​2.高精度减法​​
  • ​​3.高精度乘法​​
  • ​​4.高精度除法(高精度/低精度)​​
  • ​​5.高精度除法(高精度/高精度)​​
  • ​​3.总结​​
  • ​​4.更新日志​​

1.前言

近期学习了高精度的相关算法,现整理如下,最重要的是要理解算法的本质:模拟实现平时的竖式计算过程

补充相关习题链接,欢迎学习后练习:

2.内容

直接开始学习之路吧~~

1.高精度加法

1.用普通数组实现

#include <bits/stdc++.h>
using namespace std; // 高精度加法
char a[505], b[505];
int m[505], n[505];

int main()
{
cin >> a >> b;
int len1 = strlen(a);
int len2 = strlen(b);
//1.转换为字符并逆序存储
for (int i = len1 - 1, j = 1; i >= 0; i--, j++)
m[j] = a[i] - '0';
for (int i = len2 - 1, j = 1; i >= 0; i--, j++)
n[j] = b[i] - '0';
int len = max(len1, len2);
//相加
for (int i=1; i <= len; i++)
{
m[i]+= + n[i];
m[i + 1] += m[i] / 10; //考虑进位
m[i] %= 10;
}
//考虑前导0
if (m[len + 1]) //第一位是否为0
cout << m[len +1];
else
while (m[len] == 0 && len> 1)
len--;

for (int j = len; j >= 1; j--)
cout << m[j];
return 0;

}

高精度算法详解(蒟蒻,轻喷,欢迎指正)_c++

2.用结构体实现

#include <bits/stdc++.h>
using namespace std; //2.方法2 用结构体

struct Hugeint { //大整型结构体(有必要初始化)
int num[505] = {0}; //存数字
int len = 0; //存长度
};

Hugeint strtoint(string a)
{
Hugeint ans;
//补充 .length()只可获取字符串长度 .size()除此之外,还可获取vector长度
for (int i = a.length() - 1; i >= 0; i--)
ans.num[++ans.len] = a[i]-'0'; //下标从1开始,逆序存储数组
return ans;
}

Hugeint add(Hugeint m, Hugeint n)
{
Hugeint ans;
ans.len = max(m.len, n.len);
for (int i = 1; i <= ans.len; i++)
{
ans.num[i] += m.num[i] + n.num[i]; //相加存储到ans
ans.num[i + 1] += ans.num[i] / 10; //大于10进位
ans.num[i] %= 10; //留下余数
}
//处理进位溢出
if (ans.num[ans.len + 1] > 0) //如果最后一位的下一位有数字,说明进位了,则扩大ans.len
ans.len++;
return ans;
}

void print(Hugeint z)
{
for (int i = z.len; i >= 1; i--) //与上面逆序存储保持一致
{
cout << z.num[i];
}
}

int main()
{
//1.先当成字符串输入
char a[505], b[505];
cin >> a >> b;
//2.将a b字符串里的元素转换为int类型,并存储到m.num
Hugeint m = strtoint(a);
Hugeint n = strtoint(b);
//3.将m,n中的数据相加(注意处理进位溢出)
Hugeint z = add(m, n);
//4.逆序打印
print(z);
return 0;
}

2.高精度减法

3.高精度乘法

4.高精度除法(高精度/低精度)

5.高精度除法(高精度/高精度)

3.总结

4.更新日志

2022.5.12 整理上传高精度加法

欢迎评论留言、指正~~



举报

相关推荐

高精度算法

高精度算法模板

算法:高精度(大数)

算法提高 高精度乘法

【基础算法】高精度加法

算法之高精度(三)

C++算法(高精度算法)

0 条评论