2025-12-29:判断整除性。用go语言,给定一个正整数 n,先把它每一位上的数字加起来得到 S,再把这些数字相乘得到 P,

举报
福大大架构师每日一题 发表于 2025/12/29 06:45:59 2025/12/29
【摘要】 2025-12-29:判断整除性。用go语言,给定一个正整数 n,先把它每一位上的数字加起来得到 S,再把这些数字相乘得到 P,令 T = S + P。如果 n 能被 T 整除,则返回 true;否则返回 false。1 <= n <= 1000000。输入: n = 99。输出: true。解释:因为 99 可以被其数字和 (9 + 9 = 18) 与数字积 (9 * 9 = 81) 之和...

2025-12-29:判断整除性。用go语言,给定一个正整数 n,先把它每一位上的数字加起来得到 S,再把这些数字相乘得到 P,令 T = S + P。如果 n 能被 T 整除,则返回 true;否则返回 false。

1 <= n <= 1000000。

输入: n = 99。

输出: true。

解释:

因为 99 可以被其数字和 (9 + 9 = 18) 与数字积 (9 * 9 = 81) 之和 (18 + 81 = 99) 整除,因此输出为 true。

题目来自力扣3622。

🔢 步骤一:分解数字

首先,需要获取正整数 n 的每一位数字。代码中使用了一个 for 循环,通过反复将 n 的临时变量 x 除以10并取余数来得到最低位的数字 d。然后,将 x 除以10(向下取整)以移除已经处理过的最低位,直到 x 变为0。这样就能依次得到从低位到高位的每一位数字。

➕✖️ 步骤二:计算和S与积P

在循环分解每一位数字的同时,代码维护两个变量:

  • S:初始值为0。每得到一位数字 d,就将其加到 s 上,即 s += d
  • P:初始值为1。每得到一位数字 d,就将其乘到 m 上,即 m *= d

循环结束后,s 的值就是数字之和 Sm 的值就是数字之积 P

🧮 步骤三:计算T并判断整除性

得到 SP 后,计算 T = S + P。最后,判断原始的输入数字 n 是否能被 T 整除。在Go语言中,这通过取模运算符 % 实现。如果 n % T 的结果等于0,则说明 n 能被 T 整除,函数返回 true;否则返回 false

⏱️ 空间与时间复杂度分析

  • 总的额外空间复杂度O(1)。在整个计算过程中,只使用了固定数量的额外变量(如 s, m, x, d),这些空间占用不随输入数字 n 的大小而改变。
  • 总的时间复杂度O(d),其中 d 是数字 n 的位数。因为循环执行的次数等于数字 n 的位数,而每位数字上的操作(取余、加法、乘法)都是常数时间。对于一个正整数 n,其位数 d 约为 log₁₀(n),因此也可以说时间复杂度是对数级别的 O(log n)

Go完整代码如下:

package main

import (
	"fmt"
)

func checkDivisibility(n int) bool {
	s, m := 0, 1
	for x := n; x > 0; x /= 10 {
		d := x % 10
		s += d
		m *= d
	}
	return n%(s+m) == 0
}

func main() {
	n := 99
	result := checkDivisibility(n)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

def check_divisibility(n: int) -> bool:
    s, m = 0, 1
    x = n
    while x > 0:
        d = x % 10
        s += d
        m *= d
        x //= 10
    return n % (s + m) == 0

def main():
    n = 99
    result = check_divisibility(n)
    print(result)

if __name__ == "__main__":
    main()

在这里插入图片描述

C++完整代码如下:

#include <iostream>

bool checkDivisibility(int n) {
    int s = 0, m = 1;
    int x = n;
    while (x > 0) {
        int d = x % 10;
        s += d;
        m *= d;
        x /= 10;
    }
    return n % (s + m) == 0;
}

int main() {
    int n = 99;
    bool result = checkDivisibility(n);
    std::cout << std::boolalpha << result << std::endl;
    return 0;
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。