我编写了一个函数来查找一个数字,使得其数字之和等于给定的总和以及等于给定数字的位数。例如,如果给定sum = 20并且给定no = 3,则解为299,因为299是最小的3位数,使得299的数字之和为20。 看看我的代码。
#include <iostream>
#include <math.h>
using namespace std;
void smallestNumber(int sum, int no_of_digits, int mul, int num, int s_num) {
int i;
if(no_of_digits <= 0)
return;
for(i=0; i<9; i++) {
num += (i+1)*mul;
s_num += (i+1);
if(s_num == sum) {
cout << num << endl;
exit(1); //Alternative for exit(1)
} else if(s_num < sum) {
smallestNumber(sum, no_of_digits-1, mul/10, num, s_num);
}
num -= (i+1)*mul; //Backtracking
s_num -= (i+1);
}
}
int main() {
int sum, no_of_digits;
cin >> sum >> no_of_digits;
smallestNumber(sum, no_of_digits, pow(10,no_of_digits-1), 0, 0);
return 0;
}
在上面的代码中,我能够根据需要获得解决方案但是我无法弄清楚当s_num = sum时如何返回。目前我在这里使用exit(1)并且我不能使用return语句,因为它也会打印所有其他数字组合。另外,我如何确定解决方案是否可行并显示-1。