当前位置: 首页 > news >正文

高精求小数幂--高精度乘法+小数

https://www.luogu.com.cn/problem/P1517

1.memset初始化要在正确位置

2.标记小数位置和去除前导零和后面多余的0

#include<bits/stdc++.h>
#include<string>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<int,int> pii;
int a[110555],b[110555],c[110555],an[110555];
int n;
string s;
int pos;
int main()
{
while(cin>>s>>n)
{int p=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(int i=s.size()-1;i>=0;i--){if(s[i]=='.') pos=s.size()-i-1;else a[p++]=s[i]-'0';}pos=pos*n;///记录n次方的小数点位置 int l=p;for(int i=0;i<p;i++) b[i]=a[i];n--;while(n--)n次方 {memset(c,0,sizeof(c));///一定在这里初始化c和an数组,不然后面乘怎么搞啊 memset(an,0,sizeof(an));///高精度乘法 for(int j=0;j<p;j++){for(int i=0;i<l;i++){c[i+j]+=a[j]*b[i];}}int co=0;for(int i=0;i<p+l+7;i++){int w=(c[i]+co)%10;co=(c[i]+co)/10;an[i]=w;}l=p+l+7;for(int i=0;i<l;i++) b[i]=an[i];}int w=0,r=0;for(int i=l+15;i>=pos;i--){if(!b[i]) w++;else break;}for(int i=0;i<=l+15-w;i++){if(!b[i]) r++;else break;}for(int i=l+15-w;i>=pos;i--)///整数部分 {cout<<b[i];}for(int i=pos-1;i>=r;i--)///有小数部分 {if(i==pos-1) cout<<"."<<b[i];else cout<<b[i];}cout<<endl;
}
return 0;
}

相关文章:

  • k230学习笔记-疑难点(1)
  • 第19章:基于efficientNet实现的视频内容识别系统
  • 何小鹏在得意的笑
  • 第五章 SQLite数据库:3、SQLite 常用语法及使用案例
  • Lesson 12 Goodbye and good luck
  • 《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端
  • C#winform主线程刷新UI时竟抛异常“从不是创建控件的线程访问它“
  • c++STL——vector的使用和模拟实现
  • 【Android 】ContentProvider深度解析
  • ssh用户秘钥登录设置
  • 接口测试:实用指南4.0
  • 医疗设备预测性维护合规架构:从法规遵循到技术实现的深度解析
  • Electricity Market Optimization(VI) - 机组组合模型以及 Gurobi 求解
  • 20250417-vue-条件插槽
  • uview1.0 tabs组件放到u-popup中在微信小程序中滑块样式错乱
  • Java深入
  • Qt常见按钮类控件属性及其使用
  • 微前端架构
  • 盘古-ultra:不用英伟达GPU,华为发布全新大模型
  • SpringBoot高校学生评教系统设计实现
  • 匈牙利国会通过退出国际刑事法院的决定
  • 言短意长|新能源领军者密集捐赠母校
  • 法院为“外卖骑手”人身权益撑腰:依法认定实际投保人地位
  • 利物浦提前四轮英超夺冠,顶级联赛冠军数追平曼联
  • 又一名90后干部被查,已有多人倒在乡镇领导岗位上
  • 《2025职场人阅读报告》:超半数会因AI改变阅读方向