21xrx.com
2024-12-22 18:33:21 Sunday
登录
文章检索 我的文章 写文章
C++如何实现高精度计算保留多位小数
2023-07-05 09:07:15 深夜i     --     --
C++ 高精度计算 保留多位小数

C++是一门广泛应用于计算机编程的高级语言,对于高精度计算,需要保留多位小数,C++提供了一种解决方案。

在C++中,可以使用以下三种数据类型来实现高精度计算:

1. 数组:可以使用数组来存储长数字,并进行计算。

2. 字符串:将长数字转换为字符串后,对其进行计算。

3. STL库(标准模板库)提供的高精度类:在C++中,STL库提供了一种高精度计算的类 named lib ,可以通过引入头文件 来使用。

以下是使用数组实现保留多位小数的方法:

1. 将长数字存储在一个数组中 

2. 实现除法、加法、减法、乘法等基本运算

3. 对得到的结果进行四舍五入

以下是代码实现:


#include<bits/stdc++.h>

using namespace std;

string div(string a,int b,int &r)

{

  string ans;

  int t=0,len=a.length();

  for(int i=0;i<len;i++)

  {

    t=10*t+a[i]-'0';

    ans.append(1,char(t/b+'0'));

    t=t%b;

  }

  r=t;

  return ans;

}

int main()

{

  int n,i,len,j;  //n表示保留小数点后n位

  string a,b; 

  int r=0;

  cin>>a>>n;

  len=a.length();

  for(i=0;i<len;i++)

    if(a[i]=='.') 

      break;

  if(n==0)    //特判n=0 

  { 

    for(j=0;j<i;j++) 

      cout<<a[j]; 

    return 0; 

  } 

  else if(i==len-1)  //特判没有小数点的情况 

  { 

    cout<<a<<'.'; 

    for(i=1;i<=n;i++) 

      cout<<'0'; 

    return 0; 

  } 

  b=a.substr(i+1); 

  len=b.length(); 

  for(j=len;j<n;j++) 

    b.append(1,'0');  //处理不足n位的情况

  len=a.length(); 

  for(i=0;i<len;i++) 

    if(a[i]=='.') 

      break; 

  cout<<a.substr(0,i)<<'.'; 

  len=b.length(); 

  for(i=0;i<len;i++)

  {

    int t=b[i]-'0';

    a=div(a,10,r);

    t+=r*10;

    for(j=1;j<=9;j++)

      if(j*(t-j)>=0&&(j+1)*(t-j)<=0) 

        break;

    cout<<j;

    r=t-j*j;

  }

  return 0;

}

以上是使用数组实现高精度计算的方法,同样也可以使用字符串和STL库提供的高精度类进行计算。对于需要进行高精度计算的程序,可以根据实际需求采用不同的方法进行实现。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复