|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- int main()
- {
- int i, target, invert = 0;
- int num;
-
- //999 * 999;100*100;从大到小递减
- for (num = 998001 ; num > 10000; num--)
- {
- // 先求倒置数 invert
- target = num;
- invert = 0;
- while (target)
- {
- invert = invert * 10 + target % 10;
- target = target / 10;
- }
-
- // 如果num跟倒置数invert一致,说明num是回文数
- if (invert == num)
- {
- //求回文数的因数,i是三位数
- for (i = 100; i < 1000; i++)
- {
-
- //num/i 是三位数,需要被整除
- if (!(num % i) && (num / i >= 100) && (num / i < 1000))
- // if ( (num / i >= 100) && (num / i < 1000))//错误!!!
- {
- goto FINDIT;
- }
- }
- }
- }
- FINDIT: printf("结果是%d == %d * %d\n", num, i, num / i);
- return 0;
- }
复制代码
提问:定义的都是整数,为什么把余数等于0条件去掉后,得到的结果是浮点数四舍五入后的整数呢
感谢!!!
- //num/i 是三位数,需要被整除
- if (!(num % i) && (num / i >= 100) && (num / i < 1000))
- // if ( (num / i >= 100) && (num / i < 1000))//错误!!!
复制代码
本帖最后由 jackz007 于 2021-11-2 22:10 编辑
整型数除法如果不能整除,得到的将是浮点数整数部分的数值,小数部分会被直接舍弃。对于本例而言,符合条件的回文数必须能被三位数整除,而且,商也是三位数,这无疑是最为重要的条件。
- #include <stdio.h>
- bool hui(int d)
- {
- int k , n ;
- for(k = d , n = 0 ; k ; k /= 10) n = n * 10 + k % 10 ;
- return n == d ;
- }
- int main(void)
- {
- int c , d , k ;
- for(c = 0 , d = 999 * 999 ; d > 99 * 99 ; d --) {
- if(hui(d)) {
- for(k = 100 ; k < 1000 && d / k > 99 ; k ++) {
- if(d / k < 1000 && ! (d % k)) {
- printf("%3d : %d = %d x %d\n" , c + 1 , d , k , d / k) ;
- c ++ ;
- break ;
- }
- }
- }
- if(c) break ;
- }
- }
复制代码
编译、运行实况:
- D:\00.Excise\C>g++ -o x x.c
- D:\00.Excise\C>x
- 1 : 906609 = 913 x 993
- D:\00.Excise\C>
复制代码
|
|