全国服务热线:400-6263-721

位置:西安少儿编程信息学培训学院 > 学校动态 > 信息学奥赛教程 高精度计算

信息学奥赛教程 高精度计算

来源:西安少儿编程信息学培训学院时间:2023/6/2 10:23:11

  每种计算机语言的基本数据类型,都有一定的范围限制,在一些科学计算中,当需要运算的算数(加数、减数、乘数、除数)大于基本数据类型所能表示的范围时,需要通过算法来实现这些运算,比如200位的两个数相乘

  高精度计算需要解决的问题:

  1、数据的输入和存储

  通常情况下,采用字符或者字符串方式输入,用数组来存储输入数的每个位数上的数字

  如“45654756”

  种方法,定义一个结构体,结构体中包含一个数组,和一个长度

  第二种方式,只用一个数组,存储,数组的第0个元素存储该数的位数

  本人认为第二种方式更为简洁,更符合使用习惯

  采用“倒序”存储,是将个位放在较前,以便和其他数计算时,位数对齐

  //种方式,用结构体

  struct{

  int len;//表示这个数的位数

  int num[6,5,7,4,5,6,5,4];//存储这个数各位数上的数字

  }

  第二种方式:用数组的第0位存储该数的位数

  num[8,6,5,7,4,5,6,5,4]

  以下是输入字符串,将数保存到数组的代码:

  #include

  #include

  using namespace std;

  const int LEN=500;

  int aa[LEN];

  void inputNum(string ss,int a[]); //输入需要计算的数保存到数组

  void printArr(int a[]) //将一个数打印输出

  int main()

  {

  string s1 ="36895434535";

  inputNum(s1,aa);

  printArr(aa);

  return 0;

  }

  void inputNum(string ss,int a[])

  {

  int len = ss.length();

  a[0] = len;

  for (int i=0;i

  {

  a[len-i] = ss[i] - 48;//字符变成数字,并且倒序存储

  }

  }

  void printArr(int a[])

  {

  for (int i=a[0];i>0;i--)

  {

  cout<

  }

  cout<

  }

  作者:noipbar

  链接:https://www.jianshu.com/p/189cfffd4061

  来源:简书

  著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/972/news/628350/违者必究! 以上就是西安少儿编程信息学培训学院 小编为您整理 信息学奥赛教程 高精度计算的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-6263-721