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);}
}

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

在这里插入图片描述

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

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

相关文章

20230807通过ffmpeg将DTS编码的AUDIO音频转换为AAC编码

20230807通过ffmpeg将DTS编码的AUDIO音频转换为AAC编码 2023/8/7 20:04 ffmpeg dts 转AAC 缘起:由于网上找的电影没有中文字幕,有内置的英文字幕,但是还是通过剪映/RP2023识别一份英文字幕备用! I:\Downloads\2005[红眼航班]Red E…

Scikit-learn聚类方法代码批注及相关练习

一、代码批注 代码来自:https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets …

怎么学习JavaScript相关技术? - 易智编译EaseEditing

学习JavaScript相关技术需要一步步地积累知识和实践经验。以下是一些建议的学习步骤和资源: 基础知识: 开始学习JavaScript之前,了解基本的编程概念和术语。你可以通过在线课程、教材或教学视频来学习编程的基础知识。 学习基本语法&#x…

mysql转sqlite3

在项目中需要将mysql迁移到sqlite3中,此时需要作数据转换 准备工作 下载mysql2sqlite转换工具 https://github.com/dumblob/mysql2sqlite/archive/refs/heads/master.zip 下载sqlite3 https://www.sqlite.org/download.html 转换 命令行中输入如下命令 1、cd …

【香瓜说职场】如何高效地提问(2018.05.06)

一、什么是低效地提问? 香瓜先举3个非常非常常见的低效提问实例: 1、“为什么我的XXX不成功?” 这个问题就像“为什么我会摔倒”,可能原因有“腿残疾”、“路上有坑”、“眼神不好”等无数种原因……“不摔倒”的我是回答不了的、…

.NET根据类的值进行序列化反序列化操作

前言: 在.NET种,序列化一般常用的方式是使用Newtonsoft.Json进行序列化和反序列化操作,比如创建一个Person类 public class Person {public string Name { get; set; }public int Age { get; set; } }序列化为json // 对象序列化为 JSONPe…

【Spring Boot】拦截器与统一功能处理

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE进阶 上一篇文章我们讲解了Spring AOP是一个基于面向切面编程的框架,用于将某方面具体问题集中处理,通过代理对象来进行传递,但使用原生Spring AOP实现统一的…

【图像分类】CNN + Transformer 结合系列.4

介绍两篇利用Transformer做图像分类的论文:CoAtNet(NeurIPS2021),ConvMixer(ICLR2022)。CoAtNet结合CNN和Transformer的优点进行改进,ConvMixer则patch的角度来说明划分patch有助于分类。 CoAtN…

ARM微架构

一、流水线 二、指令流水线 指令流水线 指令流水线 指令流水线 ARM指令流水线 ARM7采用3级流水线 ARM9采用5级流水线 Cortex-A9采用8级流水线 注1:虽然流水线级数越来越多,但都是在三级流水线的基础上进行了细分 PC的作用(取指) …

opencv基础49-图像轮廓02-矩特征cv2.moments()->(形状分析、物体检测、图像识别、匹配)

矩特征(Moments Features)是用于图像分析和模式识别的一种特征表示方法,用来描述图像的形状、几何特征和统计信息。矩特征可以用于识别图像中的对象、检测形状以及进行图像分类等任务。 矩特征通过计算图像像素的高阶矩来提取特征。这些矩可以…

【GO】 33.go-zero 示例

1. 获取go-zero库 go get -u github.com/zeromicro/go-zero 2. 安装goctl brew install goctlgoctl -v #goctl version 1.5.4 darwin/amd64 3. 创建.api文件, greet.api goctl api -o greet.api syntax "v1"info (title: // TODO: add titledesc: //…

手眼标定眼在手上

1、为什么要用手眼标定 参考手眼标定特别是眼在手上在网上的文章很多,但很多在实际中调试不通。在定位时候,往往希望相机能返回的是机械的世界坐标,而不是相机的的图像坐标。从而间接计算出相机坐标系与机械坐标世界坐标转换矩阵&#xff0c…