2010年2月8日 星期一

Problem 10922 2 the 9s,9 的倍數

Problem 10922 此題要輸入一個 n 值後,判斷它是否為 9 的倍數以及它的 9-degree。

本來我還看不懂這題的意思,所以我就上網去找這題的資料,發現原來是將此數的所有位數相加後除以 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題庫目錄
回首頁

沒有留言: