高精度的简述

近期开了CSDN的博客,一方面想借CSDN的资源好好学习,另一方面就是想用这个博客记录道路的点滴。
下面谈谈高精度:
高精度也叫大整数,就是超出整形(int)甚至(longlong)的数据范围的数。(int 的范围是-2147483648,2147483647/long long 的范围-922 3372 0368 5477 5808 ~ 922 3372 0368 5477 5807)
有一种思想是把大数变成字符串string输入。
A+B Problem(高精)

#include<bits/stdc++.h>
using namespace std;

#define ma 100000
string x,y;
int a[ma],b[ma],c[ma],la,lb,lc;
int main ()
{
    cin >>x>>y;
    la= x.length();
    lb= y.length();
    for (int i=0; i<la; i++)
        a[la-i]=x[i]-'0';
    for (int j=0; j<lb; j++)
        b[lb-j]=y[j]-'0';
    lc=max(la,lb);
    for (int k=1; k<=lc; k++)
    {
        c[k]+=a[k]+b[k];
        c[k+1]=c[k]/10;
        c[k]%=10;
    }
    if (c[lc+1]>0)
        lc++;
    for (int i=lc; i>0; i--)
        cout << c[i];
    return 0;
}

length()的意思是字符串的长度
string a;
int main ()
{
int n;
cin >>a;//输入asc
n = a.length();
cout <<n;//输出3
return 0;
}
减法和加法差不多。
A*B Problem

#include<bits/stdc++.h>
using namespace std;

#define ma 100000
string x,y;
int a[ma],b[ma],c[ma],la,lb,lc;
int main ()
{
    cin >> x>>y;
    la = x.length ();
    lb = y.length ();
    for (int i=0; i<la; i++)
        a[la-i]=x[i]-'0';
    for (int i=0; i<lb; i++)
        b[lb-i]=y[i]-'0';
    lc = la+lb;
    for (int i=1; i<=la; i++)
    {
        for (int j=1; j<=lb; j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    }
    while (c[lc]==0&&lc >1)lc--;
    for (int i=lc; i>0; i--)
        cout <<c[i];
    return 0;
}
       c[i+j-1]+=a[i]*b[j];

在这里插入图片描述
每次相乘,都要向先走一位
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
有进位,进1削10;

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值