題目描述在計算機系統的時間顯示上,通常以hh:mm:ss格式來顯示,即時:分:秒,每段均以兩個數位顯示,如12:02:59,表示12時2分59秒?,F給出兩個這樣格式的時間,請計算出它們的時間差,并以該格式顯示出來。輸入格式共兩行,每行均為按hh:mm:ss格式的時間信息。輸出格式一行,按hh:mm:ss 格式輸出時間差。樣例輸入00:00:0100:01:00樣例輸出00:00:59數據規模
2 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
估計這道題不讓用DateTime的相關函數,否則太簡單了。 下面的例子,從校驗用戶的輸入,直到計算時間差,都是用系統的其他函數(非datetime相關),有效時間的范圍是:00:00:00~24:00:00 ,可以個位輸出,例: 0:1:2. --- 為了對比,給出了使用TDateTime相關函數及不使用的方法。
program time_difference; uses strutils, sysutils; type //方法一: 使用TDateTime function getTimeDiff( const stime1 : string ; const stime2 : string ; var sdiff: string ) : Boolean ; var dt1, dt2, dtdiff: TDateTime; begin try dt1 := StrToDateTime(stime1); dt2 := StrToDateTime(stime2); dtdiff := dt1 - dt2; DateTimeToString(sdiff, 'hh:mm:ss' , dtdiff); except on E:EConvertError do exit( false ); end ; getTimeDiff := true ; end ; //方法二: 不使用TDateTime function getTimeDiff_2( const stime1 : string ; const stime2 : string ; var sdiff: string ) : Boolean ; var time_1, time_2, time_diff : longint ; t_hour, t_minute, t_second : longint ; begin if not getTimeInSeconds(stime1, time_1) then exit( false ); if not getTimeInSeconds(stime2, time_2) then exit( false ); time_diff := time_1 - time_2; if time_diff < 0 then time_diff := -time_diff; t_hour := time_diff div 3600 ; t_minute := time_diff mod 3600 div 60 ; t_second := time_diff - t_hour * 3600 - t_minute * 60 ; sdiff := Format( '%.2d:%.2d:%.2d' , [t_hour, t_minute, t_second]); exit( true ); end ; //方法二用到的函數 function getTimeInSeconds( const stime : string ; var time_in_seconds : longint ) : Boolean ; var s_hh, s_mm, s_ss : string ; hour, minute, second, errcode : integer ; begin s_hh := ExtractDelimited( 1 , stime, [ ':' ]); s_mm := ExtractDelimited( 2 , stime, [ ':' ]); s_ss := ExtractDelimited( 3 , stime, [ ':' ]); Val (s_hh, hour, errcode); if errcode <> 0 then exit( false ); Val (s_mm, minute, errcode); if errcode <> 0 then exit( false ); Val (s_ss, second, errcode); if errcode <> 0 then exit( false ); if not (hour in [ 0..24 ]) then exit ( false ); if not (minute in [ 0..59 ]) then exit ( false ); if not (second in [ 0..59 ]) then exit ( false ); if (hour = 24 ) and ( (minute <> 0 ) or (second <> 0 ) ) then exit( false ); time_in_seconds := hour * 3600 + minute * 60 + second; exit( true ); end ; //主程序 var stime1, stime2 : String ; //t_sec_1, t_sec_2 : Longint; stdiff : string ; begin writeln ( 'Input two times (hh:mm:ss):' ); readln(stime1); readln(stime2); //方法一 if getTimeDiff(stime1, stime2, stdiff) then writeln (stdiff) else writeln ( 'Error happened.' ); //方法二 if getTimeDiff_2(stime1, stime2, stdiff) then writeln ( 'Diff. ' , stdiff) else writeln ( 'Error happened.' ); end . |
運行:
Input two times (hh:mm:ss): 12:34:56 23:45:00 1. 11:10:04 2. 11:10:04 |

炎炎設計
TA貢獻1808條經驗 獲得超4個贊
const
m=300;
var i:byte;
a,b,s:integer;
begin
b:=0;s:=0;
for i:=1 to 12 do
begin
read(a);
if a>m+b then
begin
writeln(-i);
exit;
end;
if m+b-a>=100
then
begin
s:=s+100*((m+b-a) div 100);
b:=(m+b-a)mod 100;
end
else b:=m+b-a;
end;
writeln(1.2*s+b:0:0);
end.
wikioi里面的1057
- 2 回答
- 0 關注
- 140 瀏覽
添加回答
舉報
0/150
提交
取消