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

为什么要需要高精度计算?

     每种计算机语言的基本数据类型,都有一定的范围限制,在一些科学计算中,当需要运算的算数(加数、减数、乘数、除数)大于基本数据类型所能表示的范围时,需要通过算法来实现这些运算,比如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 <iostream>

#include <cstring>

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<len;i++)

{

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

}

}

void printArr(int a[])

{

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

{

cout<<a[i];

}

cout<<endl;

}

    原文作者:noipbar
    原文地址: https://www.jianshu.com/p/189cfffd4061#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞