//練習5:編程實作,用戶輸入多少秒,然后程式轉換為幾天幾小時幾分鐘幾秒。
//我的代碼是:
Console.WriteLine("請輸入總秒數:");
string str = Console.ReadLine();
int sec = Convert.ToInt32(str);
int day = sec / (60 * 60 * 24);
int sec1 = sec % (60 * 60 * 24);
int hour = sec1 / 3600;
int sec2 = sec1 % (60 * 60);
int min = sec2 / 60;
int sec3 = sec2 % 60;
Console.WriteLine("{0}秒轉換為{1}天{2}小時{3}分鐘{4}秒。", sec, day, hour, min, sec3);
//老師的代碼是:
Console.WriteLine("請輸入總秒數:");
int zong = Convert.ToInt32(Console.ReadLine());
int tian = zong / (3600 * 24);
int shi = zong % (3600 * 24) / 3600;
int fen = zong % 3600 / 60;
int miao = zong % 60;
Console.WriteLine("{0}秒轉換為{1}天{2}小時{3}分鐘{4}秒。", zong, tian, shi, fen, miao);
Console.ReadKey();
上述兩個代碼得出的結果都是一樣的,但是我的代碼明顯復雜。
我的思路是:天數應該是總秒數/3600/24,然后小時數就應該是 天數余下的秒數/3600 分鐘數應該是 小時數剩下的秒數/60 那剩下的秒數就是要求的秒數。
但是老師代碼到分鐘數 就直接用總分鐘數求余3600然后除以60 ,秒數也是直接用總分鐘數求余60
這是為什么呢?
uj5u.com熱心網友回復:
用TimeSpan更簡單uj5u.com熱心網友回復:
資料型別是int時, “/”符號進行的是取整運算,而不是四舍五入。如果資料型別是Double,“/”進行的就是除法運算了
uj5u.com熱心網友回復:
3600不就等于60*60沒什么大差距,你也可以把【sec1】或【sec2】直接寫入
uj5u.com熱心網友回復:
還沒學到??
uj5u.com熱心網友回復:
你的是正常思路,變數用英文也比較好。老師的是有些簡單的數學技巧的,對上一級時間單位取余,就可以不用減了
小時數是對一天的秒數取余數,即扣除天數 zong % (3600 * 24),剩下的秒數轉換為小時 / 3600
分鐘數是對一小時的秒數取余數,即扣除分鐘數 zong % 3600 ,剩下的秒數轉換為分鐘 / 60 ;
秒數是對一分鐘的秒數取余數,即扣除分鐘數,miao = zong % 60 ,剩下的直接就是秒數了;
變數不依賴,可能編譯器會優化并行吧
uj5u.com熱心網友回復:
但為什么是用總秒數相除呢?不應該是排除了天數和小時數之后余下的描述相除嗎?
uj5u.com熱心網友回復:
謝謝,我再理解一下??
uj5u.com熱心網友回復:
TimeSpan ts = new TimeSpan(0, 0, 秒數);
string str = ts.Days + "天" + ts.Hours + "小時" + ts.Minutes + "分鐘" + ts.Seconds + "秒";
uj5u.com熱心網友回復:
謝謝,我研究研究
uj5u.com熱心網友回復:
你這代碼也沒有不一樣啊 ,你的只不過定義了中間變數罷了,你合并一下不就跟下面的一模一樣了轉載請註明出處,本文鏈接:https://www.uj5u.com/net/52402.html
標籤:C#
上一篇:網站報錯,iis怎么設定呢
