值的平方數可以拆成兩個部份,
加總若為該值,就輸出結果。
/* ACM 256 Quirksome Squares * mythnc * 2011/11/10 16:26:49 * run time: 0.008 */ #include <stdio.h> typedef struct part { int front; int end; } Part; int range(int); Part split(int, int); void output(int, int); int digitn(int); int main(void) { int i, digit, n; Part s; while (scanf("%d", &digit) == 1) { n = range(digit / 2); for (i = 0; i < n; i++) { s = split(i * i, n); if (s.front + s.end == i) { output(s.front, digit / 2); output(s.end, digit / 2); putchar('\n'); } } } return 0; } /* range: return the square range */ int range(int max) { int i, n; for (n = 1, i = 0; i < max; i++) n *= 10; return n; } /* split: split square in two parts, * save in s */ Part split(int square, int n) { Part s; s.front = square / n; s.end = square % n; return s; } /* output: output format result */ void output(int number, int digit) { int i; for (i = digitn(number); i < digit; i++) printf("0"); printf("%d", number); } /* digitn: return the digit of n */ int digitn(int n) { int count; if (n == 0) return 1; for (count = 0; n; count++) n /= 10; return count; }
沒有留言:
張貼留言