本來我還看不懂這題的意思,所以我就上網去找這題的資料,發現原來是將此數的所有位數相加後除以 9 ,若是小於 10 ,則結束;若不小於 10 ,則要繼續將 n/9 的所有位數相加後再除以 9,再判斷下去。
例如:999999999999999999999 (21個9),相加後等於189,不小於10,而189 mod 9也等於 0,則可先知道它是 9 的倍數,189 相加後等於 21,不小於10 ,再相加後等於 3,此值小於10,則結束。f(999999999999999999999) = f(189) = f(21) = f(3),總共做了三次,所以 degree 為 3。
當我了解這個原則後,就寫出來了。
以下是函式程式碼:
int degree()
{
int len = strlen(tmp), n = 0, i;
for(i = 0;i < len; i ++)
n += tmp[i] - '0';
sprintf(tmp, "%d", n);
return n;
}
By David.K
p10922題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言