鱼C论坛

 找回密码
 立即注册
查看: 1248|回复: 1

[已解决]一个代码的返回值问题

[复制链接]
发表于 2021-3-8 09:55:48 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 202021130162 于 2021-3-9 11:01 编辑

题目链接:https://www.luogu.com.cn/problem/P2010

我的代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int Change(int n)
  4. {
  5.         int a[8] = {0}, i = 0;                                        //保证八位数判断回文
  6.         while (n)
  7.         {
  8.                 a[i] = n % 10;                                      //a[i]中储存各位数字
  9.                 n = n / 10;
  10.                 i++;
  11.         }
  12.         for (int i = 7; i >= 0; i--)
  13.         {
  14.                 cout << a[i];
  15.         }
  16.         cout << endl;
  17.         int j = 0, k = 7;
  18.         while(j<k)
  19.         {
  20.                 if (a[j] != a[k])
  21.                 {
  22.                         return 0;
  23.                 }
  24.                 j++, k--;
  25.         }
  26.         return 1;                                              //1表示回文,2表示非回文
  27. }
  28. int Time(int n)
  29. {
  30.         int a[8] = {0}, i = 7;                                        //保证八位数对日期年份进行判断
  31.         while (n)
  32.         {
  33.                 a[i] = n % 10;                                      //a[i]中储存各位数字
  34.                 n = n / 10;
  35.                 i--;
  36.         }
  37.         int Y = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3], M = a[4] * 10 + a[5], D = a[6] * 10 + a[7];        //分别表示年月日
  38.         //如果年月日都相互匹配,返回1,否则返回0
  39.         //1.判断大小月份
  40.         if (M % 2 == 0 && M != 2)                                         //二月独立出来判断
  41.         {
  42.                 if (D > 30)
  43.                 {
  44.                         return 0;
  45.                 }
  46.         }
  47.         else if (M % 2 == 1 )                                         
  48.         {
  49.                 if (D > 31)
  50.                 {
  51.                         return 0;
  52.                 }
  53.         }
  54.         //2.判断二月
  55.         else if (M == 2)
  56.         {
  57.                 if ((Y % 4 == 0 && Y % 100 != 0) || Y % 400 == 0)             //闰年
  58.                 {
  59.                         if (D > 29)
  60.                         {
  61.                                 return 0;
  62.                         }
  63.                 }
  64.                 else
  65.                 {
  66.                         if (D > 28)
  67.                         {
  68.                                 return 0;
  69.                         }
  70.                 }
  71.         }
  72.                 return 1;
  73. }
  74. int main()
  75. {
  76.         int a, b, s = 0;
  77.         cin >> a >> b;
  78.         for (int i = a; i <= b; i++)
  79.         {
  80.                 if (Change(i) == 1&&Time(i)==1)                     //用Change函数判断是否回文,Time函数判断日期是否存在
  81.                 {
  82.                         s++;
  83.                 }
  84.         }
  85.         cout << s;
  86.         return 0;
  87. }
复制代码




问题:在程序运行时,判断日期是否存在的函数似乎被跳过了,直接返回了0,应该怎么解决呢?


希望各位大牛们帮我看看是哪里出了问题,感觉逻辑没错啊......
谢谢大家了!!
最佳答案
2021-3-8 21:37:56
本帖最后由 xieglt 于 2021-3-8 21:39 编辑

&&运算符
先判断运算符前面的条件是否为真,如果为假,跳出if,
如果为真,再判断运算符后面的条件。如果Change(i)==1为假,就不会执行Time(i)==1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-8 21:37:56 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 xieglt 于 2021-3-8 21:39 编辑

&&运算符
先判断运算符前面的条件是否为真,如果为假,跳出if,
如果为真,再判断运算符后面的条件。如果Change(i)==1为假,就不会执行Time(i)==1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 06:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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