首页 > 解决方案 > 在计数回文中出现逻辑错误

问题描述

问题描述:

比赛在 n 天 hh 小时、mm 分钟和 ss 秒后结束。给定两个 n 值,我们会在指定的区间内找到多少个 nhhmmss 格式的回文?

如果一个字符串向后读取与向前读取相同,则称该字符串为回文。

约束输入 一行包含两个整数 n1 和 n2,其中 n1<n2

输出一个整数,表示此倒计时间隔内的回文数

时间限制 3

示例示例 1

输入

1 2

输出

472

解释

我们需要检查从 1000000 到 2235959 的数字,仅包括最后 6 位数字对应于时间的数字。我们找到了 472 个这样的数字:1000001、1001001、1002001、1003001、1004001、...、2231322、2232322、2233322、2234322、2235322

示例 2

输入

0 2

输出

708

解释

有708个回文:0000000, 0001000, 0002000, 0003000, 0004000, ..., 2231322, 2232322, 2233322, 2234322, 2235322

我的代码:

#include<iostream> 
using namespace std; 
long int count=0,hh=0,mm=0,ss=0;

int isPalindrome(int n) 
{ 
    
    int rev = 0; 
    for (int i = n; i > 0; i /= 10) 
        rev = rev*10 + i%10; 

    
    return (n==rev); 
} 

 
void countPal(int min, int max) 
{ 
    for (int i = min; i <= max;) 
    { int time;
     time=i*1000000+hh*10000+mm*100+ss;
      if (isPalindrome(time)) 
        count++;
     ++ss;
     if(ss>59)
     { ++mm; ss=0;}
     if(mm>59)
     {++hh; mm=0;}
     if(hh>23)
     { ++i; hh=0;}
       
    }
} 

 
int main() 
{   int n1,n2;
    cin>>n1>>n2;
    if(n1==0)
      n1++;
    countPal(n1,n2);
    cout<<count;
    return 0; 
}

对于测试用例 1、2,我得到 288,而答案是 472,我哪里出错了?

标签: c++

解决方案


推荐阅读