高精度算法--入门

高精度算法是基础算法中比较实用的算法之一,它主要应用于大数之间的运算。
(主要是在超过 longlong 范围时应用,或者两者进行运算后超过 longlong 的范围的计算。)
高精度是利用字符来存一串 或者 利用一个数组来存一个数字。
~其实像小学数学一样列一个竖式就能看懂了。。。

结构体:

struct node{
    int a[10000],len;//len来记录数字的长度,a是记录具体的每一个数字
};

1.高精度的加法和减法:
加减法是利用每一个相同位相加或相减,首先找到最长的那一串,用较短的那一串来进行操作。

node jia(node x,node y)
{
    if(x.len>y.len)swap(x,y);//找出短的
    for(int i=1;i<=x.len;i++)
    {
        y.a[i]+=x.a[i];
        if(y.a[i]>=10)
        {
            if(i==y.len)y.len++;//如果超出原来的长度
            y.a[i+1]++;//10进制的性质
            y.a[i]-=10;
        }
    }
    return y;
}

2.高精度的乘法:
乘法相对来说较难,但是还是很简单~
乘法也是向小学数学那样列出了竖式。
而进位却是有点复杂。

node mult(node x,node n)
{
    bigint y;
    y.len=x.len;
    for(int i=1;i<=x.len;i++)
    {
        y.a[i]+=x.a[i]*n;
        int k=i;
        while(y.a[k]>=10)//可能不止1进位
        {
            y.a[k+1]+=y.a[k]/10;
            y.a[k]%=10;
            k++;
            y.len=max(y.len,k);//也可能长度增加
        }
    }
    return y;
}

除法嘛。。。
不想写了。。
3.输出
简单啊!

void putout(node a)
{
    for(int i=a.len;i>=1;i--)
        printf("%d",a.a[i]);
    puts("");
}

The end~~~~~~~~~~~~~~~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值