高精度算法(c++)

高精度加法

简单模拟一下小学竖式加法即可

那么何为高精度呢,简单来说就是处理 long long都处理不了的数据,既然long long存不了,那我们就用字符串存啦- 。 -

精髓

1.我们可以用两个整型数组存字符数组的每一位,然后比较两个数组的长度,取最大的那个。
存的时候一般倒着存(从低位到高位,因为整数没有除个位以下的数位,但你的最高位还可以进位,那么你就又要开一个位置来存这个新的最高位)。

for (int i = 0 ; i < lena ; i++) s1[i] = a[strlen(a)-1-i]-'0';
    
for (int i = 0 ; i < lenb ; i++) s2[i] = b[strlen(b)-1-i]-'0';
    
int lenc = max(lena,lenb);

2.然后进行模拟数位加法即可,如果s1[i]+s2[i]>=10,就进位,下一位加1,如此往复循环。

for (int i = 0 ; i < lenc ; i++)
    {
   
        c[i] = c[i]+s1[i]+s2[i];
        c[i+1] = c[i]/10;
        c[i] = c[i]%10;
    }

3.最后需要判断一下最高位相加是否要进1

if (c[lenc]) cout<<"1";

Code1

# include <bits/stdc++.h>

using namespace std;

char a[10000],b[10000];
int s1[10000],s2[10000],c[10000];

int main ()
{
   
    scanf("%s %s",a,b); 
    
    int lena = strlen(a),lenb = strlen(b);
    
    for (int i = 0 ; i < lena ; i++) s1[i] = a[strlen(a)-1-i]-'0';
    
    for (int i = 0 ; i < lenb ; i++) s2[i] = b[strlen(b)-1-i]-'0';
    
    int lenc = max(lena,lenb);
    
    for (int i = 0 ; i < lenc ; i++)
    {
   
        c[i] = c[i]+s1[i]+s2[i];
        c[i+1] = c[i]/10;
        c[i] = c[i]%10;
    }
    
    if (c[lenc]) cout<<"1";
    for (int i = lenc-1 ; i >= 0 ; i--) cout<<c[i];
    
    return 
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值