作者abin987 (ABIN)
看板MATLAB
标题Re: [请益] 这题计算年月日的程式要怎麽写阿(急!!!)
时间Fri Jul 6 00:56:56 2007
※ 引述《NicolasY (走自己的路)》之铭言:
: 小弟只差这题即可毕业了,请版上各位高手出手相助阿~~~~
: 题目如下:
: 平年为365天,闰年将再多加一天(每四年一闰,每百年不闰)。试撰写一个MATLAB程式,
: 以计算"自民国某年某月某日迄今共经过多少天"。
: 使用者输入资料:欲进行计算之民国yy年mm月dd日,今日为民国tyy年tmm月tdd日。
: 输出请用fprintf以整数%d格式,按"自民国yy年mm月dd日迄民国tyy年tmm月tdd日..
: 共经过total_day日"之叙述内容输出。
: 这题我想了很久...但是都没头绪,请各位高手们救救我吧!!!拜托了(鞠躬)
提示一下
先找一天作为reference day
分别计算输入的两个日期与这个ref. day的天数差距
最後相减就是结果啦
这种题目好像每个程设的课都会出的说
下面是我写的code
我没详细去验证出来的数字对不对
但是作法差不多
请自己check一下吧
%%%%%%%%%% codes start
oldday=input('Input old day:(yymmdd)\n','s');
newday=input('Input today:(yymmdd)\n','s');
if length(oldday)~=6 || length(newday)~=6 % check format
error('Day format not correct!');
end
mdays=[31 28 31 30 31 30 31 31 30 31 30 31]; % days in month
y1=str2num(oldday(1:2))+1910;
y2=str2num(newday(1:2))+1910;
m1=str2num(oldday(3:4));
m2=str2num(newday(3:4));
d1=str2num(oldday(5:6));
d2=str2num(newday(5:6));
bis1=floor(y1/4); % bissextile to year 1
bis2=floor(y2/4); % bissextile to year 2
bis3=floor(y1/100); % not bissextile in hundred years
bis4=floor(y2/100);
d2oldday=y1*365+bis1-bis3; % days to year 1, 1/1
d2newday=y2*365+bis2-bis4; % days to year 2, 1/1
d2oldday=d2oldday+sum(mdays(1:m1-1))+d1; % days to day 1
d2newday=d2newday+sum(mdays(1:m2-1))+d2; % days to day 2
if rem(y1+1,4)==0 && rem(y1+1,100)~=0 && m1>2 % check year 1 for bissextile
d2oldday=d2oldday+1;
end
if rem(y2+1,4)==0 && rem(y2+1,100)~=0 && m2>2 % check year 2 for bissextile
d2newday=d2newday+1;
end
totaldays=d2newday-d2oldday; % calculate days difference
fprintf('自民国%d年%d月%d日迄民国%d年%d月%d日共经过%d日\n',...
y1-1910,m1,d1,y2-1910,m2,d2,totaldays);
%%%%%%%%%% codes end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.156.25
※ 编辑: abin987 来自: 220.132.156.25 (07/06 01:32)
1F:推 KevinT:被m了~~真是太凶猛了...@@|| 07/06 16:24
※ 编辑: abin987 来自: 220.132.156.25 (07/06 22:50)