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個例題難度并不是很高,主要在于你的了解,要将整個思路進行總結,就像我上面的理清思路,然後多注意細節,多敲代碼!!!就可以啦!!!加油!!!