【C++】小乐乐求和题目分析n变量类型讨论


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: C++

文章目录

  • 💯前言
  • 💯题目描述
  • 💯解题分析
  • 💯为什么 `n` 需要是 `long long`
    • 问题重点:中间计算水平上的数据类型
      • 不足的例子:
      • 正确解决:将 `n` 设置为 `long long`:
  • 💯结论思考
  • 💯小结


在这里插入图片描述


💯前言

  • 算法程序设计中,对于输入范围大的结构计算结果,选择适宜的数据类型是解决问题的关键手段之一
    本文将基于一道计算和结果的题目,对为什么需要将变量设置为 long long 类型进行进一步分析。我们不仅提供大量的代码简述,还将提供清晰的计算思路,并选择为课题作最优化答案。这不仅方便读者入门学习,也能让读者受益于大数据算法的思考。
    C++ 参考手册
    在这里插入图片描述


💯题目描述

小乐乐求和
在这里插入图片描述

小乐乐最近触碰了和符号∑,他想计算约等于

所有正整数:
∑ i = 1 n i \sum_{i=1}^n i i=1ni

但是小乐乐很苦惶,请你助助他解答。

输入描述
输入一个正整数【 1 ≤ n ≤ 10^9 】。

输出描述
输出一个值,为和结果。

示例1

  • 输入:1
  • 输出:1

示例2

  • 输入:10
  • 输出:55

💯解题分析

从题目的输入范围( 1 ≤ n ≤ 1 0 9 1 \leq n \leq 10^9 1n109)及计算公式:

∑ i = 1 n i \sum_{i=1}^n i i=1ni

可以看出,输入数据和计算过程中都需要进行大数操作。这里我们分析两个关键问题:

  1. 数据类型问题:为什么 n 需要是 long long
  2. 为什么不仅仅是 sumlong longn 还要调整?

以下将分段说明:


💯为什么 n 需要是 long long


问题重点:中间计算水平上的数据类型

在 C++ 中,数据类型有对应的结构:

  • int 类型:可表示的范围 : − 2 31 to 2 31 − 1 ≈ − 2.1 × 1 0 9 to 2.1 × 1 0 9 -2^{31} \; \text{to} \; 2^{31}-1 \approx -2.1 \times 10^9 \; \text{to} \; 2.1 \times 10^9 231to23112.1×109to2.1×109
  • long long 类型:可表示的范围 : − 2 63 to 2 63 − 1 ≈ − 9 × 1 0 18 to 9 × 1 0 18 -2^{63} \; \text{to} \; 2^{63}-1 \approx -9 \times 10^{18} \; \text{to} \; 9 \times 10^{18} 263to26319×1018to9×1018

该题目中,当 n = 1 0 9 n = 10^9 n=109 ,计算

sum = n × ( n + 1 ) 2 = 1 0 9 × 1 0 9 + 1 2 ≈ 5 × 1 0 17 \text{sum} = \frac{n \times (n + 1)}{2} = \frac{10^9 \times 10^9 + 1}{2} \approx 5 \times 10^{17} sum=2n×(n+1)=2109×109+15×1017

如果将 n 设置为 int

  • 在计算 n \times (n + 1) 时,因为是 int 类型,系统会使用 int 实现计算,结果会 满达 int 范围并发生溢出,为错误值。

不足的例子:

#include <iostream>
using namespace std;int main() {int n = 1000000000;  // n 设为 intlong long sum = (n * (n + 1)) / 2;  // 会发生溢出cout << sum << endl;  // 错误结果return 0;
}

在这里插入图片描述

在这个例子中,虽然 sumlong long,但因为 nintn * (n + 1) 还是在 int 级别上计算的,实际结果已经满达了 int的范围,即满时数字溢出。


正确解决:将 n 设置为 long long

#include <iostream>
using namespace std;int main() {long long n;  // 将 n 设为 long longcin >> n;long long sum = (n * (n + 1)) / 2;cout << sum << endl;  // 正确结果return 0;
}

在这里插入图片描述


💯结论思考

最好的习惯是:

  1. 根据输入范围,正确选择数据类型
  2. 如果结果的计算中存在满达一个类型范围的情况,优先通过动态符合级别进行匹配。

💯小结

  • 在这里插入图片描述
    通过本文对为什么需要使用 long long 解决大范围数据计算的解释,我们可以看出,选择合适的数据类型不仅能避免溢出,还能保证代码的正确性。在这之上,习惯检查计算过程中的数据体积,是查测与解决漂浮问题的重要技巧。结合上面的分析,应用于大量比较大的输入,使用并保持较大的计算类型优化数据流通关系,是一份不可缺少的思考方式

在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础知识——数据结构与算法(一)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据结构与算法…

WebView通过@JavascriptInterface 调用原生方法

1. 创建 WebView 和设置 WebView 设置 在 XML 布局中添加 WebView 在activity_main.xml里创建一个WebView控件 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schem…

python:用 sklearn.metrics 评价 K-Means 聚类模型

sklearn 的 metrics 模块提供的聚类模型评价指标如下&#xff1a; ARI 评价法&#xff08;兰德系数&#xff09;: adjusted_rand_score AMI 评价法&#xff08;相互信息&#xff09;: adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…

基于AI对话生成剧情AVG游戏

游戏开发这个领域&#xff0c;一直有较高的学习门槛。作为一个非专业的游戏爱好者&#xff0c;如果想要开发游戏&#xff0c;往往受制于游戏引擎的专业程度&#xff0c;难以完成复杂的游戏项目。 AI IDE的诞生&#xff0c;提供了另外的一种思路&#xff0c;即通过AI 生成项目及…

mac电脑可以使用的模拟器

BlueStacks Air 推荐-》亲测可用 BlueStacks Air https://www.bluestacks.com 支持macOS/Windows&#xff0c;刚新增了对Apple Silicon系列M芯片的支持 GameLoop https://www.gameloop.com/ 支持 macOS/Windows Genymotion https://www.genymotion.com/ 支持Android/macO…

qt 类中的run线程

在Qt中&#xff0c;QThread类的run()方法是线程的执行入口&#xff0c;它是由QThread内部自动调用的&#xff0c;而不是用户直接调用。 详细解释&#xff1a; QThread类&#xff1a; QThread是Qt的线程类&#xff0c;提供了用于多线程操作的接口。我们可以创建QThread对象并将…

ElasticSearch 数据聚合与运算

1、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多&#xff0c;而且查询速度非常快&#xff0c;可以实现近实时搜索效果。 注意&#xff1a; 参加聚合的字段必须是 keywor…

人工智能浪潮来袭:2024年技术革命与产业变革深度解析@附64页PDF文件下载

随着2024年的到来&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度、广度和深度改变着我们的生产和生活方式。在这篇深度解析中&#xff0c;我们将带您一探AI技术的最新发展、产业应用的现状以及未来的安全治理趋势。 技术革命&#xff1a;AI技术的新范…

python 渗透测试开发工具之 子域名查询 python脚本逻辑 开发 高阶逻辑思维 CDN解析流程细分到信息收集的域名以及子域名分析

目录 知识点说明 域名收集是信息收集的一部分 而域名分为主域名以及子域名 所以 最后 域名说明 前提 解释域名域IP得作用 DNS解析流程【必控知识点】 解析总结 域名是什么 域名得分段解释 www.baidu.com【必控知识点】 从技术角度来看 总结: 信息收集子域名…

搭建分布式ZooKeeper集群

title: 搭建分布式ZooKeeper集群 date: 2024-11-26 23:39:00 categories: - 服务器 tags: - ZooKeeper - 大数据搭建分布式ZooKeeper集群 本次实验环境&#xff1a;Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3 前提 首先配置好Hadoop集群 为了配置方便&#xff0c…

Python高级游戏开发:打造一款塔防游戏

塔防(Tower Defense)游戏是一种经典的游戏类型,玩家通过建造防御塔来阻止敌人入侵。本文将介绍如何使用Python和Pygame库开发一款简单但高级的塔防游戏,涵盖地图设计、敌人路径规划、防御塔机制以及游戏逻辑实现。 一、游戏开发环境配置 1. 安装Pygame Pygame是Python中最…

unity 雷达

unity 雷达 首先去商店下载TouchScript插件 导入的时候勾选Enable TUIO 然后把预制体Cursors和TouchManager拖上 最后把TuioInput这个脚本挂上 脚本上的端口号尽量不改

F5中获取客户端ip地址(client ip)

当F5设备对其原始设置上的所有IP地址使用NAT时&#xff0c;连接到poo成员&#xff08;nodes、backend servers&#xff09;的出站连接将是NAT IP地址。 pool 成员&#xff08;nodes、backend servers&#xff09;将无法看到真实的客户端 ip地址&#xff0c;因为看到的是F5上的…

白话java设计模式

创建模式 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 就是一次创建多次使用&#xff0c;它的对象不会重复创建&#xff0c;可以全局来共享状态。 工厂模式&#xff08;Factory Method Pattern&#xff09;&#xff1a; 可以通过接口来进行实例化创建&a…

MATLAB引用矩阵元素的几种方法

引用矩阵元素可以通过索引&#xff0c;也可以通过逻辑值 索引 通过引用元素在矩阵中的位置来提取元素&#xff0c;例如&#xff1a; - 逻辑值 通过某种逻辑运算来使得要提取的值变为逻辑 1 1 1&#xff0c;用 A ( ) A() A()提取即可&#xff0c; A A A为原矩阵的名称。 例如&…

Python发送带key的kafka消息

在Python中发送带有键&#xff08;key&#xff09;的Kafka消息&#xff0c;通常会使用confluent-kafka或kafka-python这样的库。这里我将分别展示如何使用这两个库来实现这个功能。 ### 使用 confluent-kafka 首先&#xff0c;确保你已经安装了confluent-kafka库。如果没有安装…

机器学习预处理-表格数据的空值处理

机器学习预处理-表格数据的空值处理 机器学习预处理-表格数据的分析与可视化中详细介绍了表格数据的python可视化&#xff0c;可视化能够帮助我们了解数据的构成和分布&#xff0c;是我们进行机器学习的必备步骤。上文中也提及&#xff0c;原始的数据存在部分的缺失&#xff0…

了解 SpringMVC 请求流程

文章目录 1. Spring 基础 - SpringMVC 请求流程1.1 引入1.2 什么是 MVC1.3 什么是 Spring MVC1.4 请求流程核心架构的具体流程步骤补充 1.5 案例**Maven 包引入****业务代码的编写**DaoServiceControllerwebapp 下的 web.xmlspringmvc.xmlJSP 视图 2. Spring 进阶 - Dispatcher…

【mysql】如何解决主从架构从库延迟问题

目录 1. 说明2.优化主库的写入性能3. 优化网络性能4. 增强从库的硬件性能5. 调整从库的配置6. 主从架构优化7. 监控和调优8.使用 GTID 和 Group Replication 1. 说明 1.在 MySQL 数据库中&#xff0c;从库延迟&#xff08;replication lag&#xff09;是指主库和从库之间的数据…

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色&#xff0c;它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置&#xff0c;取代了早期版本中依赖的XML配置文件。 集中化管理&#xff1a;借助Configuration注解&#xff0c;Spring Boot让用户能在一个或几个配…