#22013: 給TLE的人


ktpss97094@gmail.com (彭星樺)

學校 : 不指定學校
編號 : 86608
來源 : [49.216.40.170]
最後登入時間 :
2022-07-12 22:31:17
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [101.10.7.12] | 發表日期 : 2020-08-10 11:15

我原本補0的方法是用字串:

1.宣告str={'\0'}

2.使用sprintf數字轉字串

3.str[strlen(str)]='0' //補0

4.使用atoi字串轉數字

 

我使用這樣的方法再搭配其他寫的程式碼有碰到第二題TLE的狀況

 

解決方法為「直接使用數字」做補0的動作

把數字中每一位數字抓出來乘10的n次方

n為遞增

這樣時間上可以減少許多,我也因此AC

 

詳細步驟:

1.宣告一個sum=0,i=1

while(原本的數字a!=0)

{

    sum+=(a%10)*pow(10,i)

    a/=10  //把最後一位削掉

    i++  //次方遞增

}

 
#23674: Re:給TLE的人


21887032m@gmail.com (月神Youqik)

學校 : 不指定學校
編號 : 118942
來源 : [114.40.162.224]
最後登入時間 :
2020-12-25 11:52:16
a248. 新手訓練 ~ 陣列應用 -- 新手訓練系列 ~ 2 | From: [220.142.166.244] | 發表日期 : 2020-12-08 08:02

我原本補0的方法是用字串:

1.宣告str={'\0'}

2.使用sprintf數字轉字串

3.str[strlen(str)]='0' //補0

4.使用atoi字串轉數字

 

我使用這樣的方法再搭配其他寫的程式碼有碰到第二題TLE的狀況

 

解決方法為「直接使用數字」做補0的動作

把數字中每一位數字抓出來乘10的n次方

n為遞增

這樣時間上可以減少許多,我也因此AC

 

詳細步驟:

1.宣告一個sum=0,i=1

while(原本的數字a!=0)

{

    sum+=(a%10)*pow(10,i)

    a/=10  //把最後一位削掉

    i++  //次方遞增

}


OverflowError: int too large to convert to float    ???

 
ZeroJudge Forum