关于c++中数据sqrt() 精度问题

情景介绍

今天在做一个算法题目的时候,发现,当使用sqrt()方法进行开方的时候,一直存在提交不通过的情况。

问题分析

对数据不断分析后,发现对35进行开方后,仍然满足条件,这就存在问题。

sqrt(35) = 5.91608 

但是当我们运行以下代码的时候,却能够成立!

cout<< sqrt(35)*sqrt(35);//35

通过计算器计算和源码的分析发现问题所在!

在 C++ 中,sqrt 函数可以接受一个 double 类型的参数,并返回一个 double 类型的值。这意味着 sqrt 函数的精度是有限的,取决于 double 类型能够表示的精度。

所以当我们使用sqrt()来判断是否为整数的时候,会出现不准确的问题!!!

这时,我们需要一种新的方法来确定一个数开方后是否为整数,那就是floor()方法。

#include <cmath>  
#include <iostream>  
  
int main() {  
    double number;  
    std::cout << "请输入一个数:";  
    std::cin >> number;  
  
    double squareRoot = sqrt(number);  
    if (squareRoot == floor(squareRoot)) {  
        std::cout << "这个数的平方根是整数。" << std::endl;  
    } else {  
        std::cout << "这个数的平方根不是整数。" << std::endl;  
    }  
  
    return 0;  
}

在这个代码中,首先输入一个数。然后计算这个数的平方根,并使用 floor 函数将结果向下取整。如果取整后的平方根与原来的平方根相等,说明这个数的平方根是整数;否则,说明这个数的平方根不是整数。

那结合到我们这个问题当中,只需要将我们的sqrt(n)*sqrt(n)==n进行替换即可!

代码实现

#include<iostream>  
#include<cmath>  
#include <typeinfo>  
using namespace std;  
int main(){  
    int n;  
    cin>>n;  
    int total=0;  
      
    for(int i=1;i<sqrt(n);i++){  
        if(n%i==0&&n!=1){  
            total=total+2;  
            
        }  
    }  
    double squareRoot = sqrt(n);
    if(squareRoot == floor(squareRoot)){
        total++;  
    }  
    cout<<total;  
    return 0;  
}

最后效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jsp 的div表格示例

<%page contentType"text/html;charsetgbk" pageEncoding"UTF-8"%> <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>jsp div 表格示例 &…

十六、W5100S/W5500+RP2040树莓派Pico<HTTP Client上传数据到OneNET>

文章目录 1 前言2 简介2 .1 什么是HTTP&#xff1f;2.2 HTTP Client的优点2.3 HTTP Client工作原理2.4 HTTP Client应用场景 3 WIZnet以太网芯片4 HTTP Client网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链…

微软surface laptop禁用触摸屏(win10、设备管理器)

参考链接&#xff1a; 在屏幕中启用和禁用触摸屏Windows 设置如下

处理uniapp打包后有广告的问题

1、登录平台&#xff08;开发者中心&#xff09; 2、 3、 4、 5、

Mysql数据库管理---MySQL数据库连接、权限认证

1 mysql系统连接权限认证。 1 mysql数据库权限表在数据库启动时就载入内存&#xff0c;当用户通过身份验证后&#xff0c;就在内存中进行相应权限的存取。系统会用到mysql数据库中3个核心表&#xff1a;user&#xff0c;host&#xff0c;db。 主要包括&#xff1a; 用户列&a…

哈希表简介

哈希的概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素 时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff0c;平衡树中为树的高度&#xff0c;即 O( l o g 2 N log_2 N log2​N)&…

[论文阅读] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Abstract 车道标记检测是自动驾驶和驾驶辅助系统的重要组成部分。采用基于行的车道表示的现代深度车道检测方法在车道检测基准测试中表现出色。通过初步的Oracle实验&#xff0c;我们首先拆分了车道表示组件&#xff0c;以确定我们方法的方向。我们的研究表明&#xff0c;现有…

农业银行余额截图生成器,工商建设邮政招商,画板+标签+取快照命令实现

其实这个软件具体的实现原理标题已经讲了&#xff0c;就是易语言的画板绘画实现的&#xff0c;然后加上标签透明属性固定余额模版图生成的&#xff0c;标签的话一定要弄透明的&#xff0c;因为模版上面有些元素的颜色比较杂乱&#xff0c;如果你背景设置白色的它显得就非常假&a…

H264 NALU分析

H264简介 H.264从1999年开始&#xff0c;到2003年形成草案&#xff0c;最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c;在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10&#xff0c;⼜叫AdvancedVideo Codec&#xff0c;因此常常称为MPEG-4 AVC或直接叫…

雷达波形之一——LFM线性调频波形

文章目录 前言一、线性调频信号的形式1、原理2、时域表达式3、频域表达式 二、MATLAB 仿真1、涅菲尔积分①、MATLAB 源码②、仿真结果 2、LFM①、MATLAB 源码②、仿真结果1) 典型 LFM 波形&#xff0c;实部2) 典型 LFM 波形&#xff0c;虚部3) LFM 波形的典型谱 前言 线性调频…

追寻Moonbeam身影,泰国区块链周正在火热进行中!

继Moonbeam参与HK Web3月之后&#xff0c;下一站便是由Cryptomind Group举办的泰国2023年区块链周。本次位于泰国的区块链周以“熊市中建设&#xff0c;牛市中崛起”为理念&#xff0c;旨在为对区块链技术感兴趣的个人和投资者提供机会接触行业中的团队和专家&#xff0c;并邀请…

【学习笔记】MySQL死锁及热点行问题

目录 案例优化思路死锁的一些记录笔记热点行问题 本文记录下关于MySQL优化的学习和一点点思考。 案例 一个并发比较大的下单接口&#xff1b; 包括 step1 扣减商品库存step2 生成订单数据step3 记录操作记录 伪代码如下&#xff0c;底层使用的是MySQL数据库&#xff0c;单体服务…

家政系统、家政小程序

家政系统、家政小程序。提供线上下单&#xff0c;订单微信提醒&#xff0c;手机端一键派单&#xff0c;保姆月嫂人员展示&#xff0c;预约。拼团、秒杀、分销等营销功能。系统管理订单&#xff0c;人员&#xff0c;财务。

微头条项目实战:新增RequestHeader注解

1、RequestHeader package com.csdn.mymvc.annotation; import java.lang.annotation.*; Target(ElementType.PARAMETER) Retention(RetentionPolicy.RUNTIME) Inherited public interface RequestHeader { }2、DispatcherServlet package com.csdn.mymvc.core; import com.csd…

外贸SEO外链类型有哪些?外链建设如何做?

外贸SEO外链资源怎么找&#xff1f;海洋建站SEO外链优化方法&#xff1f; 外贸SEO外链在提高网站排名、吸引流量、增加品牌曝光方面发挥着重要作用。海洋建站将探讨外贸SEO外链的不同类型&#xff0c;帮助外贸企业更好地理解如何优化他们的在线营销策略。 外贸SEO外链&#x…

centos配置docker环境

CentOS系统更换软件安装源 yum默认链接的还是国外的镜像&#xff0c;速度相对不理想&#xff0c;配置成国内的镜像会快很多,这里以阿里镜像为例进行配置&#xff1a; 首先进行更新&#xff1a; yum updatebase源 第一步&#xff1a;备份你的原镜像文件&#xff0c;以免出错后…

工厂设备报修的流程是怎样的?维修流程要如何优化?

在当今高度自动化的生产环境中&#xff0c;工厂设备的正常运行无疑对于企业的生产效率和经济效益具有至关重要的影响。然而&#xff0c;设备故障是生产过程中不可避免的现象。当设备发生故障时&#xff0c;如何快速、有效地进行报修、维修&#xff0c;以恢复设备的正常运转&…

Activiti

序言 activiti是一个工作流引擎&#xff0c;可以将业务系统中复杂的业务流程抽取出来&#xff0c;使用专门的建模语言BPMN进行定义(所以我们也需要了解BPMN相关信息)&#xff0c;业务流程按照预先定义的流程进行执行。实现了系统的流程由activiti进行管理&#xff0c;减少业务系…

Linux--信号

一.引号的产生 1.什么是信号 在生活中&#xff0c;信号的产生是多种多样的&#xff0c;比如红绿灯&#xff0c;闹钟等等&#xff0c;Linux中的信号是什么呢&#xff1f; 1.在Linux中&#xff0c;信号的本质是一种通信方式&#xff0c;由用户或操作系统发送信号&#xff0c;通知…

性格软弱怎么办?如何改变性格软弱?

软弱指的是身体衰弱无力气&#xff0c;而这里要说的是性格软弱&#xff0c;性格软弱的人&#xff0c;大多是不自信的&#xff0c;无主见&#xff0c;容易妥协&#xff0c;害怕产生矛盾&#xff0c;遇到问题就想逃避&#xff0c;自我否定&#xff0c;担心自己这也不行那也不行。…