日期處理與進製轉換

2022-09-09 18:00:23 字數 2241 閱讀 2388

這篇文章將介紹常見的日期處理與進製轉換問題。

以題目為例:

題目描述

有兩個日期,求兩個日期之間的天數,如果兩個日期是連續的我們規定他們之間的天數為兩天。

輸入有多組資料,每組資料有兩行,分別表示兩個日期,形式為yyyymmdd

輸出每組資料輸出一行,即日期差值

樣例輸入

20130101

20130105

樣例輸出
5
細節

我們需要處理平年和閏年,大月和小月的問題。

思路我們不妨設第乙個日期是早於第二個日期的(如果不是就交換順序)。

求日期差值的問題很直接的乙個思路就是讓第乙個日期不斷加1天,直到和第二個日期相等為止。

為了存放平年和閏年每個月的天數,我們建立乙個二維陣列int month[13][2],第一維存放月份,從1到12,第0位不用,第二維為0表示平年,為1表示閏年。

我們可以先讓第乙個日期的年份加到與第二個日期的年份相差1為止,這樣可以加快速度。對於其中的年份,只要根據平年還是閏年加365或366天即可。之後再不斷讓天數加1就行。

**

#include #include #include using namespace std;

bool isleap(int y)

int month[13][2] = ,,,,,,,

,,,,,

};int main()

y1 = time1/10000,m1 = time1%10000/100,d1 = time1%100;

y2 = time2/10000,m2 = time2%10000/100,d2 = time2%100;

////if (isleap(y1) && m1 <= 2) ans += 1;

while (y1 < y2 || m1 < m2 || d1 < d2)

d1++; // 注意這裡放優化判斷之後

if (d1==month[m1][isleap(y1)]+1)

if (m1 == 13)

ans++;

} printf("%d\n",ans);

} return 0;

}

優化**參考:

優化**經過測試,存在漏洞,「20200229;20220301」這組資料會少一天,好像從閏年開始日期<=2月都會少一天。

codeup的資料應該不完整,上面這組資料和優化前**答案不一樣,但都能過。

把25行**解注釋應該就是正確答案,但是ac不了。

直接硬算是最靠譜的,不需要對年數優化。

以題目為例:

輸入兩個非負 10 進製整數 a 和 b (≤230−1),輸出 a+b 的 d (1輸入格式:

輸入在一行中依次給出 3 個整數 a、b 和 d。

輸出格式:

輸出 a+b 的 d 進製數。

輸入樣例:

123 456 8
輸出樣例:
1103
思路

將乙個p進製數轉換為q進製數,分兩步:

將p進製數x轉換為10進製數y:

int y = 0,product = 1;

while (x!=0)

搞不清楚的話,可以拿二進位制數轉換為十進位制數作為參考。

2. 將10進製數y轉換為q進製數z:

除基取餘法。

int z[40],num = 0; // 陣列z用於存放q進製數y的每一位,num為位數

dowhile (y != 0);

最後將陣列z從高位z[num-1]到低位z[0]輸出,就是q進製數z。

搞不清楚的話,可以拿十進位制數轉換為二進位制數作為參考。

**

#include #include #include using namespace std;

int main()

while (a != 0);

for (int i=num-1;i>=0;i--)

puts("");

return 0;

}

提一點,pat的編譯器,如果按照scanf的一般寫法可能會警告,將scanf("%d",&t);改成if(scanf("%d",&t)){};就不會警告了。

日期轉換處理相關

declare dt datetime set dt getdate declare number int set number 3 1 指定日期該年的第一天或最後一天 a.年的第一天 select convert char 5 dt,120 1 1 b.年的最後一天 select convert ...

進製與轉換

按進製的方法進行計數,稱進製計數制 三個要素 數碼 基數 權 如 十進位制數776.55的位權展開式 7 10 2 7 10 1 6 10 0 5 10 1 5 10 2 展開式表示,數碼乘以各自權的累加和 如11011 b 2 4 2 3 2 1 2 0 27 100.11 b 2 2 2 1 2...

遞迴與進製轉換

今天學到了三樣東西,遞迴在進製轉換方面的的一些應用 進製轉換的快捷方法 命令列如何可以持續執行。includeint main 類似與這樣的快捷方法應該很好用吧!其實這因該在一開始是就想到的為什麼輸出總是 d呢?原來這就是十進位制的輸出方式,所以如果想快速的輸出可以 八進位制 o 十六進製制 x 這...