[英]find smallest number divisible by N with sum of digits as N
对于给定的数 N(0<N<=100),找出可被 N 整除的最小正整数 X,其中 X 的位数之和等于 N,且 X 不等于 N。
public static int getSmallestNumber(int input1) {
int res =0;
for(int i=2;i<10000;i++) {
if(getSum(input1*i) == input1) {
res = input1*i;
break;
}
}
return res;
}
static int getSum(int n) {
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n/10;
}
return sum;
}
示例:输入:9 输出:18 解释:1+8 是 9 且 18 可以被 9 整除
示例 2:输入:10 输出:190 解释:1+9+0 是 10,190 可以被 10 整除
我的解决方案适用于较小的整数,但适用于较大的数字,如 98、99 或 100。
我们需要知道,如果我们再次将 7 的倍数 35(3+5=8) 与 7 相乘,那么显然会出现更大的数字 42(4+2=6) 但数字总和较低,因此每个数字的数字变化乘法似乎不确定。 因此,如果我们能找到一种方法来概括即将到来的下一个更大倍数的数字变化,那么就可以设计一个省时的解决方案。
我认为您需要添加对条件(i % input1 == 0)
的实际检查来检查可分性。
public static int getSmallestNumber (int input1) {
int res = 0;
for (int i = input1; i < 10000; i++) {
if (getSum(i) == input1 && i % input1 == 0) {
res = i;
break;
}
}
return res;
}
static int getSum (int n) {
int sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n/10;
}
return sum;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.