2010年4月8日 星期四

Problem 10515 Powers Et Al,mn的個位數

本以為這題頗難的,但看了解題提示才發現是自己笨,因為它的個位數是循環的變動的。

開始可以創一個陣列,如同以下表格:
n/m0123456789
10123456789
20149656941
30187456329
40161656161
5 (與 1 重複)0123456789
.................................

也就是說 2 * 2,只須對應到 m = 2、n = 2 的數值 4,恰好就是 2 * 2 的個位數。所以寫成 C 語言程式碼如下:
int cycle[4][10] = { {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
{0, 1, 4, 9, 6, 5, 6, 9, 4, 1},
{0, 1, 8, 7, 4, 5, 6, 3, 2, 9},
{0, 1, 6, 1, 6, 5, 6, 1, 6, 1}};
char m[102], n[102];
int mLen, nLen, mJudge, nJudge;
while (scanf("%s %s", m, n) == 2)
{
if (m[0] == '0' && n[0] == '0') break;
if (m[0] == '0' && m[1] == '\0') { printf("0\n"); continue; }
if (n[0] == '0' && n[1] == '\0') { printf("1\n"); continue; }
mLen = strlen(m), nLen = strlen(n);
printf("%d\n", cycle[( (n[nLen - 1] - '0') + ( nLen - 2 == -1 ? 0: n[nLen - 2] - '0' ) * 10 + 3) % 4 ][m[mLen - 1] - '0']);
}

By David.K

p10515題目連結
回ACM題庫目錄
回首頁

沒有留言: