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

【2024.9.29练习】R 格式

题目描述


题目分析

带小数点的高精度乘法。小数点在计算时忽略,只需在最终打印字符串的时候在合适位置四舍五入即可。对于d\times 2^n,可理解为对d乘2总共n次。因此使用“单精度×高精度”类型的算法足矣。


我的代码

一开始代码有错误,我只想到了对小数点前最后一位四舍五入,却没想到末位进一之后可能会满10,然后要再向前一位借1。后面又写了一个进位函数解决了问题。

并且一开始的最大数组长度写小了LEN=1024,考虑到还有2^{1000}的系数,应该再增加300位。测试用例果真说明如此。看来以后数组长度能开大还是尽量大一些。

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
const int LEN = 2030; //数组最大长度
//预处理
void clear(int a[]) {for (int i = 0; i < LEN; ++i) a[i] = 0;
}
//是否有浮点
int p = 0; //默认的小数点在第几位之前
bool check_point(string s) {int len = s.length();for (int i = 0; i < len; i++) {if (s[i] == '.') {p = len - i - 1;return true;}}return false;
}
//读取字符串并转换为高精度数组
void read(int a[]) {string s;cin >> s;clear(a);int len = s.length();if (check_point(s)) {int j = 0;for (int i = 0; i < len; i++) {if (s[i] == '.') {j--;}else {a[len - j - 2] = s[i] - '0';}j++;}}else {for (int i = 0; i < len; i++) a[len - i - 1] = s[i] - '0';}
}
//高精度×单精度
void mul_short(int a[], int b, int c[]) {clear(c);for (int i = 0; i < LEN - 1; ++i) {c[i] += a[i] * b;if (c[i] >= 10) {c[i + 1] += c[i] / 10;c[i] %= 10;}}
}
//数组复制
void copyy(int a[],int b[]) { //a to bclear(b);for (int i = 0; i < LEN; i++) {b[i] = a[i];}
}
void print(int a[]) {int i;for (i = LEN - 1; i >= p+1; i--)if (a[i] != 0) break;for (; i >= p; --i) cout << a[i];
}
void print2(int a[]) {int i;for (i = LEN - 1; i >= 1; --i)if (a[i] != 0) break;for (; i >= 0; --i) putchar(a[i] + '0');putchar('\n');
}
void addone(int a[],int p) {a[p]++;if (a[p] >= 10) {a[p] %= 10;addone(a,p+1);}
}
int d[LEN];
int ans[LEN];
int main() {int n;cin >> n;read(d);//乘2共n次for (int i = 0; i < n; i++){mul_short(d, 2, ans);copyy(ans, d);}//print2(ans);if (ans[p - 1] > 4) {addone(ans,p);}print(ans);return 0;
}

这道题不仅函数不完全是我自己写的(因为记不住),而且编写和纠错过程也十分漫长,常常被自己绕晕。高精度运算函数默写难度还是很大的,目前自己各方面的水平都还完全不行,要熟练掌握算法还需多加训练和思考!!

相关文章:

  • 在Spring项目中使用MD5对数据库加密
  • 【计算机网络】详解HTTP请求和响应格式常见请求方法Header报头响应报文状态码URL
  • C语言-进程控制编程
  • ceph rgw 桶分片之reshard
  • The Sandbox 游戏制作教程第 6 章|如何使用装备制作出色的游戏 —— 避免环境危险
  • 数据库 - python操作MySQL
  • 【C语言】tcp接收服务
  • 使用 Spring Boot 实现 JWT 生成与验证的自定义类
  • Library介绍(三)
  • 二叉搜索树(c++版)
  • Qt多线程与数据库
  • MacOS升级Ruby版本详解:步骤、挑战与解决方案
  • 深度学习推理的技术实现与优化策略
  • ELK-03-skywalking监控linux系统
  • 新能源汽车储充机器人:能源高效与智能调度
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Cumulo 的 ClojureScript 模块已经成型
  • django开发-定时任务的使用
  • iOS小技巧之UIImagePickerController实现头像选择
  • linux学习笔记
  • MYSQL 的 IF 函数
  • Vue 重置组件到初始状态
  • vue--为什么data属性必须是一个函数
  • 详解NodeJs流之一
  • 小而合理的前端理论:rscss和rsjs
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎样选择前端框架
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ‌JavaScript 数据类型转换
  • #13 yum、编译安装与sed命令的使用
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #WEB前端(HTML属性)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (day6) 319. 灯泡开关
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (zhuan) 一些RL的文献(及笔记)
  • (二)springcloud实战之config配置中心
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)js前端开发中设计模式之工厂方法模式
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)SpringBoot3---尚硅谷总结
  • (一)插入排序
  • (转)LINQ之路
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess配置重写url引擎
  • .naturalWidth 和naturalHeight属性,
  • .NET C# 使用 iText 生成PDF
  • .NET Core 成都线下面基会拉开序幕