[C语言] 第一阶段考核;找出最大的有由2个三位数乘积构成的回文数
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>
页:
[1]