大佬求解!!!
原题链接:50143.数位和2026-09-02 22:57:53
发布于:广东
#include <iostream>
using namespace std;
bool is_leap(int y)
{
if(y % 400 == 0) return true;
if(y % 100 == 0) return false;
if(y % 4 == 0) return true;
return false;
}
// 获取y年m月有多少天
int get_month_days(int y,int m)
{
int md[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
if(m==2 && is_leap(y)) return 29;
return md[m];
}
// 把日期y,md变成下一天
void next_day(int &y, int &m, int &d)
{
d++;
int maxd = get_month_days(y,m);
if(d <= maxd){
return;
}
// 日期溢出,进下一月
d = 1;
m++;
if(m>12){
m=1;
y++;
}
}
//数字数位和
int calc_digit_sum(int x)
{
int s=0;
while(x>0){
s += x%10;
x /=10;
}
return s;
}
int get_date_sum(int y,int m,int d)
{
return calc_digit_sum(y)+calc_digit_sum(m)+calc_digit_sum(d);
}
int main()
{
int y1,m1,d1;
int y2,m2,d2;
cin >> y1 >> m1 >> d1;
cin >> y2 >> m2 >> d2;
bool vis[100]={false};
int cy=y1, cm=m1, cd=d1;
while(true)
{
int s = get_date_sum(cy,cm,cd);
vis[s]=true;
//到达终止日期就退出
if(cy == y2 && cm == m2 && cd == d2){
break;
}
next_day(cy,cm,cd);
}
int ans=0;
for(int i=0;i<100;i++){
if(vis[i]) ans++;
}
cout << ans << endl;
return 0;
}
有哪位大佬看一下豆姐写的程序,好复杂啊!
这里空空如也














有帮助,赞一个