计算 Java 中从 1 到 n 的所有数字的数字和2024年9月10日 | 阅读 9 分钟 在本节中,我们将讨论通过 Java 程序计算 1 到 n 所有数字的数位和的方法。 示例 输入: num = 7 输出 从 1 到 7 的数字中所有数字的数位和为 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 输入: num = 17 输出 从 1 到 17 的数字中所有数字的数位和为 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 1 + 0 + 1 + 1 + 1 + 2 + 1 + 3 + 1 + 4 + 1 + 5 + 1 + 6 + 1 + 7 = 81 解释 在上面的例子中,10 被拆分为 1 + 0,11 被拆分为 1 + 1,12 被拆分为 1 + 2,13 被拆分为 1 + 3,以此类推。 朴素方法在此方法中,我们将每个数字拆分成其各位数字,然后计算其各位数字之和。观察以下程序。 文件名: ComputeSum.java 输出 The sum of digits of numbers from 1 to 17 is: 81 The sum of digits of numbers from 1 to 340 is: 3367 The sum of digits of numbers from 1 to 5 is: 15 高效方法更有效的方法有点棘手。需要一些观察才能找到技巧。让我们观察一些计算数字和的模式。 从 1 到 9,很容易计算和,因为我们可以使用前 n 个自然数的和的数学公式,即 (n x (n + 1) / 2)。请注意,单个数字不能拆分。 因此, 1 + 2 + 3 + … + 9 = (9 x (9 + 1)) / 2 = (9 x 10) / 2 = 90 / 2 = 45。 此数学公式的实现很容易,其时间复杂度为 O(1)。 现在,让我们尝试找到 99 以下数字的数位和。为了计算到 99,可以将此任务分解为如下所示的较小任务。 1 到 9 的数字的数位和 = 45 + 10 到 19 的数字的数位和 + 20 到 29 的数字的数位和 + 30 到 39 的数字的数位和 + 40 到 49 的数字的数位和 + 50 到 59 的数字的数位和 + 60 到 69 的数字的数位和 + 70 到 79 的数字的数位和 + 80 到 89 的数字的数位和 + 90 到 99 的数字的数位和 现在,为了计算 10 到 19 的数字的数位和,我们需要像下表所示那样拆分数字。 表 1
第一位数字列中数字的总和为 10,第二位数字列中数字的总和为 (9 x (9 + 1)) / 2 = (9 x 10) / 2 = 90 / 2 = 45 因此,10 到 19 的数字的数位和为 10 + 45。 现在,我们将计算 20 到 29 的数字的数位和。与上表类似,我们创建了以下表。 表 2
第一位数字列中数字的总和为 20,第二位数字列中数字的总和为 (9 x (9 + 1)) / 2 = (9 x 10) / 2 = 90 / 2 = 45 因此,20 到 29 的数字的数位和为 20 + 45。 请注意,包含第二位数字的列在两个表中是相同的。我们也看到了一个模式。 对于 10 到 19,我们得到 10 + 45 对于 20 到 29,我们得到 20 + 45 同样,对于 30 到 39,我们将得到 30 + 45。对于 40 到 49,我们得到 40 + 45。 现在,1 到 99 的数字的数位和将是 45 + 10 + 45 + 20 + 45 + 30 + 45 + 40 + 45 + … + 90 + 45 = 45 x 10 + 10 + 20 + 30 + 40 + … + 90 = 45 x 10 + 10 x (1 + 2 + 3 + 4 + … + 9) = 45 x 10 + 10 x ((9 x (9 + 1)) / 2) = 45 x 10 + 10 x (45) = (前 9 个自然数的和) x 10 + 45 x 10 因此,sumDig(99) = sumDig(9) x 10 + 45 x 10 其中 sumDig(n) 是一个计算 1 到 n 的数字的数位和的方法。类似地, sumDig(999) = sumDig(99) x 10 + 45 x 100 总的来说,sumDig(10n - 1) = sumDig(10n - 1 - 1) x 10 + 45 x (10n - 1) 算法基于上述公式,我们将编写一个算法来计算 1 到 328 的数字的数位和。 步骤 1:将数字 328 拆分为 1 到 299 和 300 到 328。 步骤 2:计算 1 到 299 的数字的数位和。从 1 到 299,我们看到 99 重复了三次:99、199 和 299。因此,1 到 99 的数字的数位和也会重复三次。因此,1 到 299 的数字的数位和为 = 3 x sum(99) + (1 + 2) x 100。 步骤 3:计算 300 到 328 的数字的数位和。和等于 3 x 29 + sumDig(28)。 同样,我们也可以处理其他数字。 算法根据上述算法,编写了以下代码。 文件名: ComputeSum1.java 输出 The sum of digits of numbers from 1 to 17 is: 81 The sum of digits of numbers from 1 to 328 is: 3241 The sum of digits of numbers from 1 to 5 is: 15 时间复杂度:上述程序的时间复杂度为 O(pow2)。这是因为第一次递归调用需要 O(pow) 时间,第二次递归调用需要 O(pow - 1) 时间,第三次递归调用需要 O(pow - 2) 时间。将它们全部加起来,最终的渐近时间复杂度为 O(pow2)。 优化上面的程序可以进一步优化以将时间复杂度降低到 O(pow)。 文件名: ComputeSum2.java 输出 The sum of digits of numbers from 1 to 17 is: 81 The sum of digits of numbers from 1 to 328 is: 3241 The sum of digits of numbers from 1 to 5 is: 15 下一个主题Java 中读取 PDF 文件 |
在 Java 中,Scanner 是一个类,它提供了用于输入不同基本类型的各种方法。它定义在 java.util 包中。在本节中,我们将学习如何使用 Scanner 类在 Java 中获取多个字符串输入。在使用 Scanner 之前,我们必须导入该包……
阅读 3 分钟
在 Java 编程语言中,数组是一种数据结构,它在连续的内存位置中存储相同类型的值。可以使用相应值的索引来访问这些值。而字符串是一个对象,它存储字符序列……
5 分钟阅读
? 在 Java 编程世界中,构造函数是用于初始化对象的特殊方法。当使用 new 关键字创建对象时,会调用它们,并且它们负责设置对象的初始状态。构造函数通常是公共的,并且与...
阅读 3 分钟
问题陈述:给定一个代表 n 枚硬币的数字 n,我们需要用这些硬币构成一个楼梯。楼梯的第 i 行包含正好 i 枚硬币。目标是确定可以使用 n 枚硬币形成的完整行数。方法...
5 分钟阅读
文本处理中的一个典型问题是字数统计。Java 多线程可以通过将任务分解成更小的部分并同时处理它们来极大地加快处理速度。在本节中,我们将讨论使用 Java 多线程进行字数统计的不同方法。使用……
阅读 8 分钟
在面向对象编程领域,Java 是最受欢迎和最广泛使用的语言之一。Java 面向对象范例的核心是类和对象,而这些元素的核心是构造函数。构造函数是 Java 的一项基本功能,用于...
5 分钟阅读
ClassLoader 在 Java 中是一个抽象类。它属于 java.lang 包。它从不同的资源加载类。在运行时用于加载类。换句话说,JVM 在运行时执行链接过程。类被加载到 JVM 中...
5 分钟阅读
在 Java 中,原始数据类型是预定义的,并被指定为保留关键字。它不与其他原始值共享状态。 Java 支持以下八种原始数据类型。要了解更多关于 Java 中的数据类型,请参阅 boolean byte int long float double char short 1) boolean 数据类型 A boolean 数据类型可以有两种类型...
7 分钟阅读
在编程世界中,一个高效可靠的集成开发环境 (IDE) 是一个关键工具。它提高了生产力,简化了开发,并为程序员提供了功能丰富的环境。随着云计算的出现,IDE 已成为开发人员实用且易于访问的选择...
阅读 3 分钟
这是 Google、Amazon、TCS、Accenture、Flipkart 等顶级 IT 公司面试中经常提出的问题。通过解决问题,人们希望检查应聘者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India