2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称这个整数为哈沙德数(Harshad number)。 给定一个整数 x, 如果 x 是哈沙德数,则返回
2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除,
我们称这个整数为哈沙德数(Harshad number)。
给定一个整数 x,
如果 x 是哈沙德数,则返回 x 各个数位的数字和;
如果不是,则返回 -1。
输入: x = 18。
输出: 9。
解释:
x 各个数位上的数字之和为 9 。18 能被 9 整除。因此 18 是哈沙德数,答案是 9 。
答案2024-11-16:
题目来自leetcode3099。
大体步骤如下:
1.函数定义:
- 定义了一个函数
sumOfTheDigitsOfHarshadNumber
,接受一个整数x
作为参数,目的在于计算该数字的各个数位的和并判断是否为哈沙德数。
2.初始化总和:
-
在函数内部,初始化一个变量
s
为 0 用于保存数字各位的和。 -
另外,将输入的
x
赋给循环变量y
,后续的操作将会用y
而不是直接修改x
。
3.计算各位数字和:
3.1.使用一个 for
循环,循环条件是 y
不等于 0。
3.2.在每次循环中:
3.2.1.使用 y % 10
获取 y
的最后一位数字,并将其加到 s
上。
3.2.2.然后通过 y /= 10
将 y
除以 10,以去掉最后一位数字。
3.3.循环结束时,变量 s
中存储的即为 x
各位数字的和。
4.判断是否为哈沙德数:
-
在计算完数字和
s
之后,检查x
是否能被s
整除(x % s
)。如果不能整除,函数返回 -1,表示x
不是哈沙德数。 -
如果能整除,则返回
s
,表示x
是哈沙德数,我们返回各个数字的和。
5.主函数:
-
在
main
函数中,定义一个整数x
(在此例中为 18)。 -
调用
sumOfTheDigitsOfHarshadNumber(x)
函数,并打印其返回值。
时间复杂度
-
计算数字和的步骤涉及到对
x
的每一位进行一次访问。假设x
的位数为d
,则时间复杂度为 O(d)。 -
在十进制中,位数与数字大小的对数成正比(
d = log10(x)
),因此可以认为时间复杂度是 O(log x)。
空间复杂度
-
函数中使用了几个整数变量(
s
和y
),这些变量的空间占用是常数级别的。 -
因此,空间复杂度为 O(1),即常数级空间复杂度。
总结
-
时间复杂度:O(log x)
-
空间复杂度:O(1)
Go完整代码如下:
package main
import (
"fmt"
)
func sumOfTheDigitsOfHarshadNumber(x int) int {
s := 0
for y := x; y != 0; y /= 10 {
s += y % 10
}
if x%s != 0 {
return -1
}
return s
}
func main() {
x := 18
fmt.Println(sumOfTheDigitsOfHarshadNumber(x))
}
Rust完整代码如下:
fn sum_of_the_digits_of_harshad_number(x: i32) -> i32 {
let mut s = 0;
let mut y = x;
while y != 0 {
s += y % 10;
y /= 10;
}
if x % s != 0 {
return -1;
}
s
}
fn main() {
let x = 18;
println!("{}", sum_of_the_digits_of_harshad_number(x));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
2023-11-16 文心一言 VS 讯飞星火 VS chatgpt (136)-- 算法导论11.3 2题
2022-11-16 2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k = 2 进行轮调后,它将变成 [1,3,0,
2021-11-16 2021-11-16:最长递增子序列的个数。给定一个未排序的整数数组,找到最长递增子序列的个数。注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。力扣673。
2020-11-16 2020-11-16:手写代码:leetcode第406题。假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。