1000 日期计算问题

Description

试用 C++的类来表示日期,给定 2 个日期 yyyy.mm.dd 求两个日期间相差的天数。

Input

 第 1 行为一个正整数T,表示测试数。

对于每个测试点,第 1 行与第 2 行分别有两个日期 yyyy.mm.dd。

Output

 对于每个测试点,输出一行数字,表示相差的天数。

Sample Input
 Copy sample input to clipboard
2
2000.02.28
2000.03.01
6297.01.21
2351.11.27
Sample Output
2
1440938

方法:主要是将输入转换成年月日  可以直接把点当成字符输入 即是年字符月字符日

#include<iostream> /*方法一*/
#include<cmath>
#include<cstring>

using namespace std;
char a[11];
int c[11];
char b[11];
int d[11];
/*long long  swap(long long a,long long b)
{
 long long temp;
 if(a<=b)
 {
  a=a;
  b=b;
 }
 if(a>b)
 {
  temp=a;
  a=b;
  b=temp;
 }
}*/
int ji_suan(int year_a,int yue_a,int ri_a)
{
 long long cha=0;
 for(int i=1;i<year_a;i++)
 {
  if(i%4==0&&i%100!=0) cha=cha+366;
  else cha=cha+365;
  int k=year_a/400;
  cha=cha+k;
 }
 for(int j=1;j<ri_a;j++)
 {
  cha=cha+1;
 }
 for(int i=1;i<yue_a;i++)
 {
  if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
  {
  cha=cha+31;}
  if(i==4||i==6||i==9||i==11)
  {
   cha=cha+30;
  }
  if(i==2&&year_a%4==0&&year_a%100!=0)
  {
   cha=cha+29;
  }
  if(year_a%400==0) cha=cha+2;
  if(i==2&&(year_a%4)!=0)
  {
   cha=cha+28;
  }
  }return cha;}
int main()
 {
 int n;
 cin>>n;
 for(int i=0;i<n;i++)
 {
 cin>>a;
 cin>>b;
 int aa=strlen(a);
 int bb=strlen(b);
 for(int j=0;j<aa;j++)
 {
  if(a[j]!='.')
  {
   c[j]=a[j]-'0';
  }
  if(a[j]=='.')
   { c[j]=='.'-'.';}  
 }
  for(int j=0;j<bb;j++)
 {
  if(b[j]!='.')
  {
   d[j]=b[j]-'0';
  }
  if(b[j]=='.')
   { d[j]=='.'-'.';}  
 }
 long long temp=0;
 long long temp2=0;
 for(int k=0;k<aa;k++)
 {
  temp=temp+c[k]*pow(10,aa-k-1);
 }
 for(int k=0;k<bb;k++)
 {
  temp2=temp2+d[k]*pow(10,bb-k-1);
 }
 long long cha=0;
 int yue_a;
 int yue_b;
 int year_a;
 int year_b;
 int ri_a;
 int ri_b;
 year_a=temp/1000000;
 year_b=temp2/1000000;
 yue_a=(temp%100000)/1000;
 yue_b=(temp2%100000)/1000;
 ri_a=temp%100;
 ri_b=temp%100;
 cout<<int(abs(ji_suan(year_b,yue_b,ri_b)-ji_suan(year_a,yue_a,ri_a)))<<endl;

 }
 
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值