C++相关例题
- 累加天数
- 打印对应的日期
- 日期差值
- 计算日期到天数的转换
- 求前N项和
累加天数
要求:设计一个程序能计算一个日期加上若干天后是什么日期
这个要求和我们之前在日期相关的例题里面实现过,大体一致的.
1.判断是否是闰年
2.对天数进行判断,大于当月则减去,并且月份+1
3.一直操作,直到要加的天数为0为止,输出日期
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin>>n) //这里的是代码中要累加的数目
{
for(int i=0;i<n;i++) //循环进行
{
int y,m,d,num; //分别为要输入的年月日和要累加的天数
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //每个月的月份
cin>>y>>m>>d>>num; //cin进行传入
while(num>days[m-1]) //当要累加的天数大于当月的天数的时候
{
if(y%400==0||(y%4==0&&y%100!=0)) //先判断是否是闰年
days[1]=29;
else
days[1]=28;
num -= days[m-1]-d; //判断完对对应的天数减去对应的一个月
d=0; //日变为0
m++; //月份+1
if(m==13) //如果月份为13月的时候
{
y++; //年份+1
m=1; //月份=1
}
}
printf("%4d-%02d-%02d\n",y,m,num); //将其进行输出,最后的num就是小于这个月月份的,也就是日子
}
}
return 0;
}
打印对应的日期
要求:给出年分m和一年中的第n天,算出第n天是几月几号
1.定义出要计算的年份和天数
2.是否是闰年计算
3.按月份进行–,月份++
4.输出对应的日期
#include <iostream>
using namespace std;
int main()
{
int year; //年份
int day; //这一年的第多少天
int mon[13] = {31, 28, 31, 30, 31, 30, 31, 31, 30 ,31, 30, 31};
while(cin>>year>>day) //循环呢输入
{
//闰年判断
if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
mon[1] = 29;
else
mon[1] = 28;
for(int i = 0; i < 12; i++) //进行月份的循环
{
if(day <= mon[i]) //如果剩下的天数小于对应的月份
{
printf("%04d-%02d-%02d\n", year, i + 1, day); //直接输出
break; //循环结束
}
else
{
day = day - mon[i]; //如果大于,则继续减去对应月份的天数
}
}
}
return 0;
}
日期差值
要求:求两个日期之间相差的天数,如果两个日期是连续的我们规定他们之间的天数为两天
两日期相减也在之前日期类代码中实现过,大家可以去看看! 点击此处
1.求出这一年距离0000年01月1号的距离函数,并对其进行封装
2.定义两个日期,对其进行输入
3.调用函数对于这里两个日期
4.对调用函数后求出的两个天数进行绝对值做差并进行输出
#include <iostream>
using namespace std;
int mon[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
int Count(int y, int m, int d) //传入对应的年月日
{
int yd = y * 365 + y / 4 - y / 100 + y / 400; //求出这一年分所有的天数和
int md = mon[m - 1]; //看在哪一个月
if (m > 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0))
md += 1; //是否是闰年判断
return yd + md + d; //整合年份对应的天数+月份对应的天数+天数
}
int main()
{
int y1, m1, d1; //==第一组日期输入求出
scanf("%4d%2d%2d", &y1, &m1, &d1);
int n1 = Count(y1, m1, d1);
int y2, m2, d2; //==第二组日期输入求出
scanf("%4d%2d%2d", &y2, &m2, &d2);
int n2 = Count(y2, m2, d2);
cout << abs(n1 - n2) + 1 << endl; //输出并绝对值做差 abs绝对值
}
计算日期到天数的转换
要求:输入对应年份的具体日子,求出是这一年的第多少天
1.对每个月都进行累加,形成一个对应的数组
2.对对应的日期进行相加,如果为5月份,则取前四个月相加的数字加上日期所对应的日
3.输出即可
#include<iostream>
using namespace std;
const int days[] = { 0,31,59,90,120,151,181,212,243,273,304,334,365 };
int main(){
int y,m,d;
while(cin>>y>>m>>d){ //循环输入
int an=days[m-1]+d; //核心代码
if(((y%4==0&&y%100!=0)||y%400==0)&&m>2) //是否是闰年
an++; //++
cout<<an<<endl; //输出
}
return 0;
}
求前N项和
要求:要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句
我利用了创建一个内部类的思想,在内部内中进行数字的相加和自加,然后定义 一个函数输入对应的n值,计算出前n项,再调用内部类的函数,注意,静态成员变量要在类的外部进行声明!
class Solution {
public:
class Sum{ //创建内部类
public: //在公有的条件下
Sum(){ //创建和的成员函数
_sum +=_i;
++_i;
}
};
int Sum_Solution(int n) { //创建前n项
_sum=0; //每次自增后对值进行恢复,防止出错
_i=1;
Sum array[n]; //调用
return _sum; //输出最终要求的值
};
private:
static int _i; //静态变量
static int _sum;
};
int Solution::_i=1; //静态变量要在类的外部赋值
int Solution::_sum=0;
今天写的5个例题难度并不是很高,主要在于你的理解,要将整个思路进行总结,就像我上面的理清思路,然后多注意细节,多敲代码!!!就可以啦!!!加油!!!