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

P7071 [CSP-J2020] 优秀的拆分

记录29

#include <bits/stdc++.h>
using namespace std;
int main(){int n,a[35]={};cin>>n;if(n%2==1){cout<<"-1";return 0;}int cnt=0;while(n!=0){if(n%2==1) a[cnt]=1;cnt++;n/=2;}for(int i=cnt-1;i>=0;i--){if(a[i]==1) cout<<fixed<<setprecision(0)<<pow(2,i)<<" ";}return 0;
}

突破点

对于正整数 n 的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,n 被分解为了若干个不同的 2 的正整数次幂。注意,一个数 x 能被表示成 2 的正整数次幂,当且仅当 x 能通过正整数个 2 相乘在一起得到。👉一个数拆成不同2的次方之和

从大到小输出这个拆分中的每一个数,若不存在优秀的拆分,输出 -1

👉偶数由大到小输出拆出来的数,奇数输出-1


思路

  1. 奇数输出-1
  2. 偶数拆成2的次方形式👉转换成二进制
  3. 由大到小输出拆出来的数

代码简析

#include <bits/stdc++.h>
using namespace std;
int main(){int n,a[35]={};cin>>n;if(n%2==1){cout<<"-1";return 0;}...return 0;
}

n为输入数

a[35]是用来保存2进制的数组

if条件判断是奇数直接输出-1

:int类型32位

#include <bits/stdc++.h>
using namespace std;
int main(){int n,a[35]={};cin>>n;if(n%2==1){...}int cnt=0;while(n!=0){if(n%2==1) a[cnt]=1;cnt++;n/=2;}...return 0;
}

cnt代表填进去的序号

循环有点类似数位分离,每次分离出2的进位

a数组来存储每一位

#include <bits/stdc++.h>
using namespace std;
int main(){int n,a[35]={};cin>>n;if(n%2==1){cout<<"-1";return 0;}int cnt=0;while(n!=0){if(n%2==1) a[cnt]=1;cnt++;n/=2;}for(int i=cnt-1;i>=0;i--){if(a[i]==1) cout<<fixed<<setprecision(0)<<pow(2,i)<<" ";}return 0;
}

for循环输出每一位

pow()函数结果非常大或者非常小会输出科学计数法

cout<<fixed<<setprecision(0)设置小数点后的精度为0,即不显示小数部分。


补充

在C++中,pow 函数用于计算一个数的幂,其返回值类型为 double。当计算结果非常大或非常小时,pow 函数的输出可能会以科学计数法(带 e)的形式显示。例如,pow(10, 9) 的结果是 1e+09,而不是 1000000000

为了避免这种情况,可以使用以下方法将结果格式化为普通数字形式。

1. 使用 std::fixed 和 std::setprecision

std::fixedstd::setprecision 是 C++ 标准库中的 I/O 操纵符,用于控制浮点数的输出格式。

语法

#include <iomanip> // 包含 std::fixed 和 std::setprecision
  • std::fixed:设置浮点数为固定小数点表示法。

  • std::setprecision(n):设置浮点数的小数点后保留的位数为 n

2. 示例代码

示例1:避免科学计数法

#include <iostream>
#include <cmath>
#include <iomanip> // 包含 std::fixed 和 std::setprecision
using namespace std;int main() {double result = pow(10, 9); // 计算 10 的 9 次幂cout << fixed << setprecision(0) << result << endl; // 设置为固定小数点表示法,小数点后保留 0 位return 0;
}
输出结果
1000000000

3. 详细解释

3.1 std::fixed
  • 作用:设置浮点数为固定小数点表示法,而不是科学计数法。

  • 用法:在输出流中使用 std::fixed,例如 cout << fixed << value;

3.2 std::setprecision(n)
  • 作用:设置浮点数的小数点后保留的位数为 n

  • 用法:在输出流中使用 std::setprecision(n),例如 cout << setprecision(0) << value;

4. 注意事项

4.1 精度问题
  • setprecision(0):设置小数点后保留 0 位,适用于整数结果。

  • setprecision(n):设置小数点后保留 n 位,适用于浮点数结果。

4.2 临时设置
  • std::fixedstd::setprecision 的设置是临时的,只影响当前输出流。如果需要多次使用,可以在每次输出前重新设置。

5. 总结

  • 问题pow 函数的输出可能会以科学计数法(带 e)的形式显示。

  • 解决方案:使用 std::fixedstd::setprecision 控制浮点数的输出格式。

  • 示例

    cout << fixed << setprecision(0) << pow(10, 9) << endl;
  • 作用

    • std::fixed:设置为固定小数点表示法。

    • std::setprecision(n):设置小数点后保留的位数为 n

http://www.dtcms.com/a/544745.html

相关文章:

  • LangChain 提示模板之少样本示例(一)
  • 建设好网站外链有哪些方式手机做任务佣金的网站
  • iOS 26 描述文件管理与开发环境配置 多工具协作的实战指南
  • 飞书在用AI“撬动”电商行业
  • 哪些网站不能备案室内设计师网络接单
  • uniapp设置vuex公共值状态管理
  • SpringCloud 负载均衡Ribbon 和 声明式服务调用Feign
  • 【STM32】串口通信及相关实验和项目
  • 7.1.2.3 大数据方法论与实践指南-报表指标管理系统+BI
  • 7.1.2.1 大数据方法论与实践指南-指标治理最佳实践
  • Go Web 编程快速入门 12 - 微服务架构:服务发现、负载均衡与分布式系统
  • 最新网站架构wordpress自动采集更新
  • uniapp 生成二维码图片[APP+H5+小程序等 全端适配]
  • 为什么有的mcu烧录的时候是用hex,有的是用bin
  • 帮人建网站价格wordpress左侧菜单怎么添加
  • SSA-Transformer-LSTM麻雀搜索算法优化组合模型分类预测结合SHAP分析!优化深度组合模型可解释分析,Matlab代码
  • 【开题答辩全过程】以 多媒体教室为例,包含答辩的问题和答案
  • Python 3.14 发布
  • 上海AI Lab开源模型P1-235B-A22B在国际物理竞赛夺金?
  • 语法从句说明描述
  • [人工智能-大模型-104]:模型层 - CNN卷积核的本质
  • 网站换空间的流程前端只是做网站吗
  • jsp是否可以做网站网站 左右浮动 广告
  • Leetcode 42
  • 【推荐系统】深度学习训练框架(一):深入剖析Spark集群计算中Master与Pytorch分布式计算Master的区别
  • PyTorch CV模型实战全流程(二)
  • i2s封装成自己定义8路音频数据发送方法
  • 读取指定文件夹中所有CSV文件,并解析内容
  • Docker镜像仓库的深度解析与实战指南
  • 推广网站怎么做模板网站关键词搜索优化怎么做