
2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除,
我们称这个整数为哈沙德数(Harshad number)。
给定一个整数 x,
如果 x 是哈沙德数,则返回 x 各个数位的数字和;
如果不是,则返回 -1。
输入:x = 18。
输出:9。
解释:
x 各个数位上的数字之和为 9 。18 能被 9 整除。因此 18 是哈沙德数,答案是 9 。
答案2024-11-16:
chatgpt
题目来自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),这些变量的空间占用是常数级别的。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))
}

fn sum_of_the_digits_of_harshad_number(x:i32)->i32{
letmut s=0;
letmut y= x;
while y !=0{
s += y %10;
y /=10;
}
if x % s !=0{
return-1;
}
s
}
fnmain(){
letx=18;
println!("{}",sum_of_the_digits_of_harshad_number(x));
}