一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。
Input
第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在长整数(long)范围内。
Output
对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。
** Sample Input**
2
1 1 1 1 2
2 28 10 3 2
Sample Output
2
40
#include <stdio.h>
long int main()
{ int p,start_month,start_date,end_month,end_date,k,j;
long int poor;
long int datediff(int start_month,int start_date,int j,int end_month,int end_date);/*函数声明*/
scanf("%d",&p);
while(p--)
{ scanf("%d%d%d%d%d",&start_month,&start_date,&j,&end_month,&end_date);/*参数*/
poor=datediff(start_month,start_date,j,end_month,end_date);
printf("%ld\n",poor);
}
return 0;
}
long int datediff(int start_month,int start_date, int j,int end_month,int end_date)
{
int num;
int i,k,n;
int s[20]={1,-2,1,0,1,0,1,1,0,1,0,1};/*与30的差的天数*/
i=start_month;
if((end_month-start_month)>1)
{
num=30*(end_month-start_month-1);/*相差两个月数的间隔,实际上就只相差一个完整的30天*/
}
if(end_month!=start_month)
{
num=30-start_date+num;
num=num+end_date;/*每月30天情况下相差月数的时间间隔*/
for(n=0;n<end_month-start_month;n++)
{
num+=s[i-1];
i++;
}/*开始计算相隔的月数有多少个不是刚好30,排除误差*/
}
else
{
num=end_date-start_date;
} /*相同月份的天数间隔*/
for(k=1;k<=num;k++)
j+=j;
return j;/*返回日期间隔,并且要求长整型*/
}
健忘笔记,希望可以帮到你
加油吧,程序猿!