阅读目录
Golang 统计能整除数字的位数
给你一个整数 num ,返回 num 中能整除 num 的数位的数目。
如果满足 nums % val == 0 ,则认为整数 val 可以整除 nums 。
示例 1:
输入:num = 7
输出:1
解释:7 被自己整除,因此答案是 1 。
示例 2:
输入:num = 121
输出:2
解释:121 可以被 1 整除,但无法被 2 整除。由于 1 出现两次,所以返回 2 。
示例 3:
输入:num = 1248
输出:4
解释:1248 可以被它每一位上的数字整除,因此答案是 4 。
提示:num 的数位中不含 0
代码
以下是使用Golang实现统计能整除数字的位数的逻辑步骤:
- 将整数转换为字符串,以便逐位访问数字。
- 初始化一个计数器
count
为0,用于统计能整除num
的数位数目。 - 遍历整数字符串中的每一位数字:
a. 将当前位的字符转换为整数。
b. 检查当前位的数字是否为0,如果是0,则跳过,因为题目要求num
的数位中不含0。
c. 检查当前位的数字是否能整除num
,如果可以,将计数器count
加1。 - 返回计数器
count
作为结果。
以下是按照上述步骤实现的Golang代码:
package main
import "fmt"
import "strconv"
func countDividingDigits(num int) int {
numStr := fmt.Sprintf("%d", num) // 将整数转换为字符串
count := 0
for _, digit := range numStr { // 遍历字符串中的每一位数字
// digitInt, _ := strconv.Atoi(string(digit))
digitInt := int(digit - '0')
if digitInt == 0 {
continue // 跳过数字为0的情况
}
if num % digitInt == 0 {
count++ // 统计能整除num的数位的数目
}
}
return count
}
func main() {
// 示例使用
fmt.Println(countDividingDigits(7)) // 输出:1
fmt.Println(countDividingDigits(121)) // 输出:2
fmt.Println(countDividingDigits(1248)) // 输出:4
}
这个Golang程序实现了上述步骤,可以统计能整除数字的位数,并在main
函数中进行示例测试。
int(digit - '0')
是将字符转换为整数的表达式。在这个表达式中:
digit
是一个字符,它代表一个数字字符。'0'
是字符常量,表示数字字符'0'
。
在ASCII编码中,数字字符 '0'
到 '9'
连续排列,其字符编码值是依次递增的。因此,减去字符 '0'
的编码值,将得到与数字字符相对应的整数值。这是一个常见的方式来将字符数字转换为整数,因为字符 '0'
的编码值是 48,字符 '1'
的编码值是 49,以此类推。
所以,int(digit - '0')
实际上是将字符 digit
转换为整数,其整数值等于该字符所表示的数字。例如,如果 digit
是字符 '5'
,则 int(digit - '0')
将返回整数值 5
。