解法1:
#include<iostream> #include<cstdio> using namespace std; void result(int num, int &result_add, int &result_mul) { int i, j, k; i = num / 100; //百位 j = num / 10 % 10; //十位 k = num % 10; //个位 result_add += i + j + k; //分解出来的位数相加 result_mul *= i * j * k; //相乘 } int main() { int i, j, k; int result_add, result_mul; for(i = 123; i <=329; i++) { j = i * 2; k = i * 3; result_add = 0; result_mul = 1; result(i, result_add, result_mul); result(j, result_add, result_mul); result(k, result_add, result_mul); if(result_add == 45 && result_mul == 362880) printf("%d %d %d\n", i, j, k); } return 0; }
解法2:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(int argc, const char * argv[]) { int n, i, j; char a[10];//数组定义比实际大一些 for(n = 123; n < 330; n++) { sprintf(a, "%d", n * 1000000 + n * 2 * 1000 + n * 3);//将abcdefghi存入到字符串a中 for(j = 0, i = '1'; i <= '9'; memchr(a, i++, 9) && j++);//比较1到9,用j记录。当字符数组a中没有i对应的字符时,根据短路原则,j++不执行,循环过后,j将不等于9 if (j == 9) { printf("%d %d %d \n", n, n * 2, n * 3); } } return 0; }