小甲鱼第一阶段测试最后一题,萌新求助。。
找出最大的有由两个三位数乘积构成的回文数#include<stdio.h>
int main()
{
long long int c,d=0,e;
for(c=10000;c<=998001;c++)
{
e=c;
d=d*10+c%10;
c=c/10;
}
if(d==e)
{
printf("%lld\n",c);
}
return 0;
}
求大佬看看我的逻辑哪里不对,为什么编译通过但是输出不了结果。 你这个d永远不可能等于e吧
一个越来越大,一个越来越小 #include "stdio.h"
int main()
{
long long int u,m;
long long int sum=0;
for(u=10000;u<=998001;u++)
{
m=u;
while(m)
{
sum=sum*10+m%10;
m=m/10;
}
if(sum==u)
{
printf ("u是回文数");
printf("\n");
}
}
return 0;
}
更正之后程序还是无输出 windlikewest 发表于 2020-2-24 19:21
#include "stdio.h"
int main()
{
你看看甲鱼老师是怎么写的吧 本帖最后由 4goodworld 于 2020-2-24 21:43 编辑
题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻找吗?
int isPalindromeNumber(int num) {
int one, two, three, four, five, six;
six = num / 100000;
five = (num - six * 100000) / 10000;
four= (num - six * 100000-five*10000) / 1000;
three= (num - six * 100000 - five * 10000-four*1000) / 100;
two=(num - six * 100000 - five * 10000 - four * 1000-three*100) / 10;
one = (num - six * 100000 - five * 10000 - four * 1000 - three * 100-two*10);
if (four == three && five == two && six == one) {
return 1;
}
else {
return 0;
}
}
int main(){
//找出最大的有由两个三位数乘积构成的回文数
int i, j, sum, max, max_i,max_j;
max_i= max_j=max = 0;
for (i = 100; i < 999; i++) {
for (j = 100; j < 999; j++) {
sum = i * j;
if (isPalindromeNumber(sum)) {
if (sum > max) {
max_i = i;
max_j = j;
max = sum;
}
}
}
}
printf("最大回文数是:%d * %d = %d", max_i, max_j, max);
return 0;
}
这是我的思路 每次for循环,需要将sum的值重新初始化,否则上一次的sum的值依然保留,导致错误。另外,你更改后的程序的输出还要调整,否则会输出很多u是回文数。 4goodworld 发表于 2020-2-24 21:24
题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻 ...
感谢大佬,码字辛苦了,我只是想找一种和答案不同的思路,^-^
页:
[1]