题目描述
如果一个整数能够被其各个数位上的数字之和整除,则称之为哈沙德数(Harshad number)。给你一个整数 x 。如果 x 是 哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回 -1 。
提示:1 <= x <= 100
根据提示解
已知提示所给的范围,划分范围后求解,笨方法。
class Solution {
public int sumOfTheDigitsOfHarshadNumber(int x) {
if (x < 10) {
return x;
}
else if (x == 100 || x == 10) {
return 1;
}
else {
//求个位数
int ge = x % 10;
//求十位数
int shi = x % 100 / 10;
int a = ge + shi;
//判断能否整除
if (x % a == 0) {
return a;
} else
return -1;
}
}
}
不使用字符串,O(1) 空间写法
class Solution {
// 计算 Harshad 数的数字和
public int sumOfTheDigitsOfHarshadNumber(int x) {
int s = 0; // 初始化数字和为0
// 循环,从给定数的最低位开始依次取出数字并求和
for (int v = x; v > 0; v /= 10) {
s += v % 10; // 将每一位数字加到数字和 s 上
}
// 如果原数除以数字和 s 的余数不为0,则返回-1表示不是 Harshad 数
// 否则返回数字和 s 表示是 Harshad 数
return x % s > 0 ? -1 : s;
}
}