高精度问题

来源:百度知道 编辑:UC知道 时间:2024/06/02 15:40:56
noip复赛(提高组)中的测试数据中,每个题的十组测试数据中有几组需要高精度?
有没有掌握的必要?

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

  高精度计算中需要处理好的以下几个问题。

  (1)数据的接收方法和存贮方法

  数据的接收和存贮:当输入的数很长时,可采用字符串方式输入,这样可输入数字很长的数,利用字符串函数和操作运算,将每一位取出,存入数组中。另一种方法是直接用循环加数组方法输入数据。
  (2)进位、借位的处理

  加法进位:a[i]:=a[i]+b[i],若a[i]>10则a[i]:=a[i]-10,a[i+1]:=a[i+1]+1;

  减法借位:若a[i]<b[i]则a[i+1]:=a[i+1]-1 a[i]:=a[i]+10,a[i+1]:=a[i+1]-1;

  乘法进位:y:=a[i]*b[i]+c,c:=y div 10 a[i]:=y-c*10

  例1:高精度加法程序

  [问题分析]

  (1)采用字符串输入的方法:str1,str2,用字符串截取的方法取出每一位;

  (2)将每一位数分别存放到a,b两数组中;

  (3)从低位到高位依次将各位数相加,对需进位的采用进位处理方法;

  (4)从高位到低位输出

  参考程序如下:

  program lx1;

  const n=100;

  var str1,str2:string;

  a,b:array[1..n]of integer;

  k,l1,l2,l,i:integer;

  begin

  readln(str1);

  readln(str2)