当前位置:   article > 正文

【第十五届蓝桥杯C/C++大学b组省赛】2024试题 D:R格式 本人想法&答案_2024年蓝桥杯c++ b组题目

2024年蓝桥杯c++ b组题目

这道题考的是高精度,核心思想就是利用加法模拟乘方。

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<vector>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<stdio.h>
  7. #include<string>
  8. #include<math.h>
  9. using namespace std;
  10. // 函数 add 用于执行大数加法,同时处理进位问题
  11. void add(string &a, string &b) {
  12. int carry = 0;
  13. for (int i = 0; i < a.size(); ++i) {
  14. carry += (a[i] - '0') + (b[i] - '0'); // 将字符转换为整数并加和
  15. a[i] = (carry % 10) + '0'; // 更新当前位的结果,并转换为字符
  16. carry /= 10; // 计算进位
  17. }
  18. if (carry) {
  19. a.push_back('1'); // 如果最后还有进位,添加到字符串末尾
  20. }
  21. }
  22. int main() {
  23. int n;
  24. string d;
  25. cin >> n >> d;
  26. string s;
  27. int decimal_pos; // 小数点位置
  28. // 将数字部分逆序存储到字符串 s 中
  29. for (int i = d.size() - 1, j = 0; i >= 0; --i) {
  30. if (d[i] != '.') {
  31. s.push_back(d[i]);
  32. j++;
  33. } else {
  34. decimal_pos = j - 1; // 记录小数点位置
  35. }
  36. }
  37. // 对 s 进行 n 次倍增,实现乘以 2^n 的效果
  38. for (int i = 1; i <= n; ++i) {
  39. add(s, s);
  40. }
  41. // 四舍五入处理
  42. if (s[decimal_pos] >= '5') {
  43. string b(s.size(), '0');
  44. b[decimal_pos + 1] = '1';
  45. add(s, b);
  46. }
  47. // 输出结果,跳过小数点
  48. for (int i = s.size() - 1; i > decimal_pos; --i) {
  49. cout << s[i];
  50. }
  51. return 0;
  52. }

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号