鱼C论坛

 找回密码
 立即注册
查看: 1277|回复: 6

[已解决]小甲鱼第一阶段测试最后一题,萌新求助。。

[复制链接]
发表于 2020-2-24 18:41:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
找出最大的有由两个三位数乘积构成的回文数
#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;
}
求大佬看看我的逻辑哪里不对,为什么编译通过但是输出不了结果。
最佳答案
2020-2-24 21:24:29
本帖最后由 4goodworld 于 2020-2-24 21:43 编辑

题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻找吗?
  1. int isPalindromeNumber(int num) {
  2.         int one, two, three, four, five, six;
  3.         six = num / 100000;
  4.         five = (num - six * 100000) / 10000;
  5.         four= (num - six * 100000-five*10000) / 1000;
  6.         three= (num - six * 100000 - five * 10000-four*1000) / 100;
  7.         two=  (num - six * 100000 - five * 10000 - four * 1000-three*100) / 10;
  8.         one = (num - six * 100000 - five * 10000 - four * 1000 - three * 100-two*10);
  9.         if (four == three && five == two && six == one) {
  10.                 return 1;
  11.         }
  12.         else {
  13.                 return 0;
  14.         }
  15. }


  16. int main(){
  17.         //找出最大的有由两个三位数乘积构成的回文数
  18.         int i, j, sum, max, max_i,max_j;
  19.         max_i= max_j=max = 0;
  20.         for (i = 100; i < 999; i++) {
  21.                 for (j = 100; j < 999; j++) {
  22.                         sum = i * j;
  23.                         if (isPalindromeNumber(sum)) {
  24.                                 if (sum > max) {
  25.                                         max_i = i;
  26.                                         max_j = j;
  27.                                         max = sum;
  28.                                 }

  29.                         }



  30.                 }
  31.                                             
  32.         }

  33.         printf("最大回文数是:%d * %d = %d", max_i, max_j, max);

  34.         return 0;
  35. }
复制代码

这是我的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 18:48:13 | 显示全部楼层
你这个d永远不可能等于e吧
一个越来越大,一个越来越小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 19:21:14 | 显示全部楼层
#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;
}
更正之后程序还是无输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 19:54:32 | 显示全部楼层
windlikewest 发表于 2020-2-24 19:21
#include "stdio.h"
int main()
{

你看看甲鱼老师是怎么写的吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 21:24:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 4goodworld 于 2020-2-24 21:43 编辑

题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻找吗?
  1. int isPalindromeNumber(int num) {
  2.         int one, two, three, four, five, six;
  3.         six = num / 100000;
  4.         five = (num - six * 100000) / 10000;
  5.         four= (num - six * 100000-five*10000) / 1000;
  6.         three= (num - six * 100000 - five * 10000-four*1000) / 100;
  7.         two=  (num - six * 100000 - five * 10000 - four * 1000-three*100) / 10;
  8.         one = (num - six * 100000 - five * 10000 - four * 1000 - three * 100-two*10);
  9.         if (four == three && five == two && six == one) {
  10.                 return 1;
  11.         }
  12.         else {
  13.                 return 0;
  14.         }
  15. }


  16. int main(){
  17.         //找出最大的有由两个三位数乘积构成的回文数
  18.         int i, j, sum, max, max_i,max_j;
  19.         max_i= max_j=max = 0;
  20.         for (i = 100; i < 999; i++) {
  21.                 for (j = 100; j < 999; j++) {
  22.                         sum = i * j;
  23.                         if (isPalindromeNumber(sum)) {
  24.                                 if (sum > max) {
  25.                                         max_i = i;
  26.                                         max_j = j;
  27.                                         max = sum;
  28.                                 }

  29.                         }



  30.                 }
  31.                                             
  32.         }

  33.         printf("最大回文数是:%d * %d = %d", max_i, max_j, max);

  34.         return 0;
  35. }
复制代码

这是我的思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 22:07:32 | 显示全部楼层
每次for循环,需要将sum的值重新初始化,否则上一次的sum的值依然保留,导致错误。另外,你更改后的程序的输出还要调整,否则会输出很多u是回文数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-24 22:50:22 | 显示全部楼层
4goodworld 发表于 2020-2-24 21:24
题目的要求是:两个三位数乘积构成的回文数
你为啥一定是才结果反推两个三位数,不能从两个三位数正向的寻 ...

感谢大佬,码字辛苦了,我只是想找一种和答案不同的思路,^-^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 05:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表