十五届蓝桥杯赛题-c/c++ 大学b组-R格式

这道题本来是想,先对2的次方用高精度求解,再将浮点型转化为整型,用高精乘低精度求,但是,没有考虑到这个浮点型数组范围太大,只能用字符串进行表示

#include <bits/stdc++.h>
using namespace std;
//高精乘低精
vector<int>mul1(vector<int>&A,int b){
  vector<int> C;
  //t为进位
  int t=0;
  for(int i=0;i<A.size()||t;i++){
    if(i<A.size())t+=A[i]*b;
    C.push_back(t%10);
    //进位
    t/=10;
  }
  //去除前导零
  while(C.size()>1&&C.back()==0)C.pop_back();
  return C;
}
int main()
{
  int cnt=0;//处理小数点
  //你要想需要把浮点数转化为整型
  //输入n,将浮点数
  int n;string m;cin>>n>>m;
  vector<int>a;
  //这里将浮点数字符串存入动态数组
  for(int i=m.length()-1;i>=0;i--){
    if(m[i]!='.')a.push_back(m[i]-'0');
    else cnt=m.length()-i-1;//几位小数
  }
  //高精度乘低精度,高精度是浮点数,低精度就是2的次方个数
  while(n--)a=mul1(a,2);
  //结果再加上小数
  for(int i=a.size()-1;i>=0;i--){
    //cout<<"进入这";
    if(i==cnt){
      //达到小数点,开始进行四舍五入判断
      if(a[i-1]>=5){
        cout<<a[i]+1;
        break;
      }
      else{
        cout<<a[i];
        break;
      }
    }
    cout<<a[i];
  }
  return 0;
}
上一篇:afka.consumer.fetcher.NoOffsetForPartitionError: NoOffsetForPartitionErro


下一篇:代码段数据段的划分-对于代码段的影响