ACM
2009. 6. 8. 15:04
반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_SIZE 20 #define MAX_CNT 1000 int isPalindrome(unsigned long long palindrome); int palindromeFunc(unsigned long long palindrome); unsigned long long g_palindromeNum; int g_repeatCnt; int main(void) { int testCase, returnVal; unsigned long long num; scanf("%d", &testCase); while(testCase) { scanf("%llu", &num); returnVal = palindromeFunc(num); printf("%d %llu\n", g_repeatCnt, g_palindromeNum); testCase--; } return 0; } int palindromeFunc(unsigned long long palindrome) { char numStr[MAX_SIZE], reverseNumStr[MAX_SIZE]; int palindromeLen, i, j=0, returnVal, count=1; unsigned long long reversePalindrome; while(count++) { if(count==MAX_CNT) return 0; returnVal = isPalindrome(palindrome); if(returnVal) { g_repeatCnt = count-2; g_palindromeNum = palindrome; return 1; } sprintf(numStr, "%llu", palindrome); palindromeLen = strlen(numStr); // Reverse for(i=palindromeLen-1, j=0; i>=0; i--){ reverseNumStr[j++] = numStr[i]; } reverseNumStr[j] = '\0'; // Add reversePalindrome = (unsigned long long)(atoll(reverseNumStr)); palindrome += reversePalindrome; } return 0; } int isPalindrome(unsigned long long palindrome) { char numStr[MAX_SIZE]; int palindromeLen, i, j; snprintf(numStr, MAX_SIZE, "%llu", palindrome); palindromeLen = strlen(numStr); // Check as if Reverse for(i=0, j=palindromeLen-1; i!=palindromeLen/2; i++, j--) { if(numStr[i]!=numStr[j]) return 0; } return 1; } |
반응형
'ACM' 카테고리의 다른 글
[10018] Reverse and Add (0) | 2009.06.03 |
---|---|
[Time Limit] Carmichael Numbers (0) | 2009.06.02 |
[Accept] 10006 Carmichael Numbers (0) | 2009.06.02 |
[Accept] 10110 Light, more light (0) | 2009.06.02 |
[Accept] 850 Crypt Kicker II (0) | 2009.06.02 |