高精度计算,大整数加、减、乘、除、阶乘、阶乘和

大整数运算的来源

常用的数据类型及其表示范围 :
UInt32/unsigned int: 0~4294967295

Int32/int: -2147483648~2147483647

Int64/long long: -9223372036854775807~9223372036854775808

UInt64/unsigned long long:0 ~18446744073709551615

float: -3.4E-38~3.4E+38
double : 1.7E-308~1.7E+308
首先看看python怎么写

a=int(input())
b=int(input())
print(a*b)

唉,流泪

由于c++跟python不一样,它的数据类型范围是有限的,最大能表示的正整数也只有20位,数据再大一些的时候就会发生数据溢出,这时候我们可以借助字符串来进行大整数运算;
1.大整数运算仿照小学加减乘除计算方法(就是手算时在草稿本上的步骤,写代码的时候脑子里时刻想象着这个步骤来写代码),进行模拟运算;
2.大整数加减乘法是借助int数组(或者vector数组)和字符串进行操作,字符串默认没有前导0
3.加减乘每次计算前都将字符串先翻转一下,从最低位开始求
4.加法和乘法最后不需要判断最高位是不是0,减和除需要判断前导0

大整数加法

大整数加法是最简单的
参考代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
int ans[N];
string a,b;
int main()
{
   
    cin>>a>>b;
    reverse(a.begin(),a.end());  //翻转
    reverse(b.begin(),b.end());
    int lena=a.length();
    int lenb=b.length();
    int i=0;
    int jin=0;
    while(i<lena&&i<lenb)    //a与b相同长度的部分
    {
   
        int t=a[i]-'0'+(b[i]-'0')+jin;
        ans[i]=t%10;
        jin=t/10;
        i++;
    }
    while(i<lena)
    {
   
        int t=a[i]-'0'+jin;
        ans[i]=t%10;
        jin=t/10;
        i++;
    }
    while(i<lenb)
    {
   
        int t=b[i]-'0'+jin;
        ans[i]=t%10;
        jin=t/10;
        i++;
    }
    if(jin) ans[i++]=jin;  //最后还有进位
    for(int j=i-1;j>=0;j--)
    cout<<ans[j];
    return 0;
} 

大整数减法

#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
int ans[N];
string a,b;
int main()
{
   
    cin>>a>>b;
    if(a==b) 
    {
   
        cout<<0;return 0;
    } 
    if(a.length(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值