基础算法 —— 高精度计算

【概述】

利用计算机进行数值计算,有时会遇到这样的问题:有些计算要求精度高,希望计算的尾数可达到几十甚至几百位,虽然计算机本身精度足够高,但受硬件限制,往往达不到实际问题所要求的精度,因此我们用程序设计的方法去实现这样的高精度计算。

除 C++ 高精算法之外,还可以选用 Java 大数类来处理高精问题,而且由于 Python 没有数据类型的限制,因此也可用 Python 来解决高精问题。

【要处理的问题】

1.数据接收与存储:当数据很长时,可以用字符串方式输入,利用字符串函数和运算操作,将每一位取出存入数组中。

void input()
{
    string s;
    cin>>s;//读入字符串
    a[0]=s.length();//用a[0]存储字符串s的位数
    for(i=1;i<=a[0];i++)//将数串转为数组a,并倒序存储
    	a[i]=s[a[0]-i]-'0';
}

2.位数的确定:接收时使用字符串,所以它的位数等于字符串的长度。

3.补零问题:当两个操作数长度不一样时,需要进行补零。

void fixed()
{
    string str1,str2;
    int len1,len2;
    int i;

    cin>>str1;//读入字符串1
    cin>>str2;//读入字符串2
    len1=str1.length();//求字符串长度1
    len2=str2.length();//求字符串长度2

    if(len1<len2)//当字符串1<字符串2时,对字符串1补零
        for(i=1;i<=len2-len1;i++)
           str1="0"+str1;
    else//当字符串1>字符串2时,对字符串1补零
        for(i=1;i<=len1-len2;i++)
           str2="0"+str2;
}

4.进位、借位处理

加法:c[i]=a[i]+b[i];
          if(c[i]>=10)

          { c[i]%=10;++c[i+1]; }

减法:if(a[i]<b[i])
          { --a[i+1];a[i]+=10; }

          c[i]=a[i]-b[i];

乘法:c[i+j-1]=a[i]*b[i]+x+c[i+j-1];
           x=c[i+j-1]/10;

           c[i+j-1]%=10;

5.商和余数的处理:视被除数、除数的位数情况进行处理

【分类】

  1. 高精度加法    点击这里
  2. 高精度减法    点击这里
  3. 高精度乘法    点击这里
  4. 高精度除法    点击这里
  5. Java 大数类:点击这里

【例题】

1.入门模版题

  1. A+B Problem(高精)(洛谷-P1601)(高精加)点击这里
  2. 大整数加法(信息学奥赛一本通-T1168)(高精加)点击这里
  3. 高精度减法(洛谷-P2142)(高精减)点击这里
  4. 大整数减法(信息学奥赛一本通-T1169)(高精减)点击这里
  5. A*B Problem(洛谷-P1303)(高精乘)点击这里
  6. 高精度乘法(信息学奥赛一本通-T1307)(高精乘)点击这里
  7. 大整数乘法(信息学奥赛一本通-T1174)(高精乘)点击这里
  8. 求10000以内的阶乘(信息学奥赛一本通-T1172)(高精乘)点击这里
  9. 计算2的N次方(信息学奥赛一本通-T1170)(高精乘)点击这里
  10. 阶乘和(信息学奥赛一本通-T1173)(高精乘+高精加)点击这里

2.混合题

  1. B进制星球(洛谷-P1604)(高精度加法+递推)点击这里
  2. 回文数(信息学奥赛一本通-T1309)(高精加+条件判断)点击这里
  3. 除以13(信息学奥赛一本通-T1175)(高精除低精+预处理)点击这里
  4. 高精除(信息学奥赛一本通-T1308)(高精除高精)点击这里
  5. 大整数的因子(信息学奥赛一本通-T1171)(高精除分解因数)点击这里
  6. 国王游戏(洛谷-P1080)(高精乘+贪心)点击这里

3.Java 与 Python

  1. 初中的算术(51Nod-1873)(Java)点击这里
  2. 一半的一半(51Nod-2382)(Java)点击这里
  3. Applese 涂颜色(2019牛客寒假算法基础集训营 Day4-E)(Java+推导)点击这里
  4. Resistors in Parallel (Gym-102028E)(Java+推导)点击这里
  5. Fibonacci in the Pocket(ZOJ-4108)(Java+斐波那契数列)点击这里
  6. Chilly Willy(CF-248B)(Python+暴力)点击这里
  7. 处女座的百日理财计划(2019牛客寒假算法基础集训营 Day3-H)(Python+DP)点击这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值