写点什么

2024-11-16:哈沙德数。用 go 语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称这个整数为哈沙德数(Harshad number)。 给定一个整数 x, 如果 x 是哈沙德数,则返回

  • 2024-11-16
    北京
  • 本文字数:1080 字

    阅读完需:约 4 分钟

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 /= 10y 除以 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)。

空间复杂度

  • 函数中使用了几个整数变量(sy),这些变量的空间占用是常数级别的。

  • 因此,空间复杂度为 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));}
复制代码



发布于: 刚刚阅读数: 3
用户头像

公众号:福大大架构师每日一题 2021-02-15 加入

公众号:福大大架构师每日一题

评论

发布
暂无评论
2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称这个整数为哈沙德数(Harshad number)。 给定一个整数 x, 如果 x 是哈沙德数,则返回_福大大架构师每日一题_福大大架构师每日一题_InfoQ写作社区