LeetCode_01 精度丢失

1281. 整数的各位积和之差

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」「各位数字之和」的差。
示例

输入:n = 234
输出:15 
解释:
各位数之积 = 2 * 3 * 4 = 24 
各位数之和 = 2 + 3 + 4 = 9 
结果 = 24 - 9 = 15

示例

输入:n = 4421
输出:21
解释: 
各位数之积 = 4 * 4 * 2 * 1 = 32 
各位数之和 = 4 + 4 + 2 + 1 = 11 
结果 = 32 - 11 = 21

对于这道题,我首先想到的是通过循环找出各个位,循环首先要知道输入数字的位数。有以下两种方法:

  • 方法一:用Math.log10()取对数
int number = 12345;
int digits = (int) Math.log10(number) + 1;
System.out.println("整数 " + number + " 的位数为:" + digits);
  • 方法二:通过String.valueOf()把数值转成字符串
int number = 12345;
String strNumber = String.valueOf(number);
int digits = strNumber.length();
System.out.println("整数 " + number + " 的位数为:" + digits);

我采用方法一,下面是我的代码:

class Solution {
    public int subtractProductAndSum(int n) {
        int digits = (int) Math.log10(n);
        int sum = 0;
        int product = 1;
        for (int i = digits; i >= 0; i++) {
        	sum += n / Math.pow(10, i);
        	product *= n / Math.pow(10, i);
        	n %= Math.pow(10, i);
        }
        return (product - sum);
    }
}

上述代码运行之后无法通过测试2,也就是输入4421时输出为22。问了GPT之后答案是:在你的代码中,乘法计算的结果错误是因为你使用了n / Math.pow(10, i)作为乘数,而实际上它们的类型是double,会导致精度丢失。修改过后的代码如下:

class Solution {
    public int subtractProductAndSum(int n) {
		int n = 4421;
        int sum = 0;
        int product = 1;
        int digits = (int) Math.log10(n);
        for (int i = digits; i >= 0; i--) {
            int digit = n / (int) Math.pow(10, i) % 10;
            sum += digit;
            product *= digit;
        }
        return (product - sum);
    }
}

现在这个代码可以正常通过了

在这里插入图片描述

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

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

相关文章

【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

一、前言 如何快速搭建图像分割网络? 要手写把backbone ,手写decoder 吗? 介绍一个分割神器,分分钟搭建一个分割网络。 仓库的地址: https://github.com/qubvel/segmentation_models.pytorch该库的主要特点是&#…

【2.2】Java微服务:Hystrix的详解与使用

目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加) 启动类添加注解 业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据&…

沁恒ch32V208处理器开发(二)工程配置

概述 MounRiver Studio在进行任何项目的开发时,为了提高效率,往往需要复用芯片厂家或第三方开发的成熟模块,这些模块通过一个.wvproj文件来进行组织,主要包含: 1)MCU厂家提供的硬件接口文件,包…

Windows使用docker desktop 安装kafka、zookeeper集群

docker-compose安装zookeeper集群 参考文章:http://t.csdn.cn/TtTYI https://blog.csdn.net/u010416101/article/details/122803105?spm1001.2014.3001.5501 准备工作: ​ 在开始新建集群之前,新建好文件夹,用来挂载kafka、z…

设计师常用的6款UI设计工具

在选择UI设计工具时,设计师需要关注UI设计工具的功能。市场上有很多设计UI的工具。既然UI设计工具这么多,设计师应该如何选择UI设计工具?本文盘点了6种流行的UI设计工具,快来看看。 1.即时设计 即时设计是一款免费的在线 UI 设计…

Kubernetes kubectl管理命令使用方法

陈述式资源管理方法(通过命令行) 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化…

element-ui表格跨页多选实现

前言 在我们日常项目开发中,经常会有表格跨页多选的需求,接下来让我们用 el-table 示例一步步来实现这个需求。 动手开发 在线体验 https://codesandbox.io/s/priceless-mcclintock-4cp7x3?file/src/App.vue 常规版本 本部分只写了一些重点代码,心急的彦祖可以直接看 性…

使用chatGPT-4 畅聊量子物理学

与chatGPT深入研究起源、基本概念,以及海森堡、德布罗意、薛定谔、玻尔、爱因斯坦和狄拉克如何得出他们的想法和方程。 1965 年,费曼(左)与朱利安施温格(未显示)和朝永信一郎(右)分享…

机器学习深度学习——文本预处理

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——序列模型(NLP启动!) 📚订阅专栏:机器学习&am…

大厂容器云实践之路(二)

3-网易蜂巢的DOCKER实践之路 面临问题 场景分析 如何解决 功能性需求(基础) 第一步 技术支撑公有化 开发流程 场景分析 功能性需求(基础) 非功能性需求(SLA) 第二步 产品技术云端化 开发流程 场景分析…

Maven介绍,部署在eclipse中

目录 一.Maven介绍 1,什么是maven? 2. 为什么maven会在企业中大量使用? 3.没有使用maven的前后区别? 4.maven在Java开发中的实际效果图 二.maven部署在eclipse中 1.下载maven在其官方网址下载(当然实际下载也要根据个人的…

C语言案例 判断是否为回文数-06

题目:随机输入一个5位数,判断它是不是回文数 步骤一:定义程序的目标 编写C程序,随机输入一个5位数,判断它是不是回文数 步骤二:程序设计 原理:即12321是回文数,个位与万位相同&#…

【C++学习手札】new和delete看这一篇就够了!

​ 食用指南:本文在有C基础的情况下食用更佳 🍀本文前置知识: C类 ♈️今日夜电波: Prover—milet 1:21 ━━━━━━️💟──────── 4:01 …

学习C语言第三天 :关系操作符、逻辑操作符

1.关系操作符 C语言用于比较的表达式&#xff0c;称为“关系表达式”里面使用的运算符就称(relationalexpression)&#xff0c;为“关系运算符” (relationaloperator) &#xff0c;主要有下面6个。 > 大于运算符 < 小于运算符 > 大于等于运算符 < 小于等…

JVM基础篇-直接内存

JVM基础篇-直接内存 什么是直接内存? 直接内存( 堆外内存 ) 指的是 Java 应用程序通过直接方式从操作系统中申请的内存,这块内存不属于jvm 传统方式读取文件 首先会从用户态切换到内核态&#xff0c;调用操作系统函数从磁盘读取文件&#xff0c;读取一部分到操作系统缓冲区…

电影院订票选座网站小程序开发(java开源)

搭建一个电影院订票选座网站小程序需要掌握Java语言和相关的Web开发技术&#xff0c;同时需要使用开源框架和库来实现。以下是一个基本的步骤指南&#xff1a; 确定技术栈 首先&#xff0c;需要确定使用的技术栈&#xff0c;以便更好的开展工作。 设计数据库 设计数据库需要…

H5实现签字板签名功能

前言&#xff1a;H5时常需要实现给C端用户签名的功能&#xff0c;以下是基于Taro框架开发的H5页面实现&#xff0c;非 Taro 的 View 标签换成 div 即可。 一、用到的技术库 签字库&#xff1a;react-signature-canvas主流React Hooks 库&#xff1a;ahooks 二、组件具体实现…

2024考研408-计算机网络 第四章-网络层学习笔记

文章目录 前言一、网络层的功能1.1、网络层功能概述&#xff08;三种功能介绍&#xff09;1.2、SDN基本概念1.2.1、理解转发与路由选择1.2.1.1、转发1.2.1.2、路由选择 1.2.2、数据平面&#xff08;转发&#xff09;1.2.3、控制平面&#xff08;路由计算与选择&#xff09;实现…

【SpringBoot框架篇】33.优雅集成i18n实现国际化信息返回

文章目录 1.简介2.MessageSource配置和工具类封装2.1.配置MessageSource相关配置2.2.配置工具类2.3.测试返回国际级文本信息 3.不优雅的web调用示例(看看就行&#xff0c;别用)4.优雅使用示例4.1.错误响应消息枚举类4.2.ThreadLocal工具类配置4.2.1.ThreadLocal工具类数据封装4…

W6100-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…