#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int Maxn = 100010;
struct bign //大整数结构体
{
int d[Maxn];
int len;
bign()
{
memset(d,0,sizeof(d)); //也可用fill()
len = 0;
}
};
bign chang(char str[]) //将字符串转化为大整数
{
bign a;
a.len = strlen(str); //字符串长度就是整数的数位
for(int i = 0;i<a.len;i++)
{
a.d[i] = str[a.len - 1 - i] - '0'; //倒着赋值
}
return a;
}
int compare(bign a,bign b)
{
if(a.len > b.len) return 1;//a比较大
else if(a.len < b.len) return -1;
else
{
for(int i = a.len - 1;i>=0;i--)
{
if(a.d[i] > b.d[i])
return 1;
else if(a.d[i] < b.d[i])
return -1;
}
return 0; //2数相等
}
}
bign add(bign a,bign b) //高精度加法
{
bign c;
int carry = 0; //设置进位
for(int i = 0;i<a.len || i<b.len;i++) //小于较大的数位
{
int temp;
temp = a.d[i] + b.d[i] + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
if(carry != 0) //最后进位不为0的话就直接赋值carry
{
c.d[c.len++] = carry;
}
return c;
}
bign sub(bign a,bign b) //高精度减法
{
bign c;
for(int i = 0;i<a.len || i<b.len;i++)
{
if(a.d[i] < b.d[i])
{
a.d[i] += 10; //如果不够减则借位
a.d[i + 1]--;
}
c.d[c.len++] = a.d[i] - b.d[i];
while(c.len - 1 >= 1 && c.d[c.len - 1] == 0) //保留至少为一位数,并且去掉高位的0
c.len--;
}
return c;
}
bign mul(bign a,int b) //高精度和低精度乘法
{
bign c;
int carry = 0; //进位
for(int i = 0;i<a.len;i++)
{
int temp = a.d[i] * b + carry;
c.d[c.len++] = temp % 10 ;
carry = temp / 10;
}
while(carry > 0) //进位的数位可能大于1位
{
c.d[c.len++] = carry % 10;
carry /= 10;
}
return c;
}
bign divi(bign a,int b,int &r) //高精度和低精度的除法
{
bign c;
c.len = a.len; //商的结果和被除数一一对应,先让其相等
for(int i = a.len -1;i>=0;i--)
{
r = r * 10 + a.d[i]; //余数加上上一位的余数
if(r < b) c.d[i] = 0; //不够除
else //够除
{
c.d[i] = r / b; //商
r = r % b; //余数
}
}
while(c.len - 1 >= 1 && c.d[c.len -1] == 0)
c.len--;
return c;
}
int main()
{
freopen("1.txt","r",stdin);
return 0;
}
高精度整数(大整数)四则运算模板
最新推荐文章于 2022-04-30 16:39:26 发布
本文详细介绍了如何实现高精度整数的四则运算,包括加法、减法、乘法和除法。通过模板代码,可以有效地处理超过普通整数范围的大整数计算,确保计算的精确性。对于大整数的存储,通常使用字符串或链表来存储每一位,然后逐位进行运算。文章中还将探讨一些优化技巧,如快速进位和位运算的应用。
摘要由CSDN通过智能技术生成