예제 #1
0
int
main(int argc, char *argv[])
{
	int sum, i;

	sum = 0;
	for (i = 1; i < NUMBER_MAX; i++) {
		if (palindromic(2, i) && palindromic(10, i))
			sum += i;
	}
	printf("%d\n", sum);
	return 0;
}
예제 #2
0
int main() {
    unsigned int result = 0;
    
    for (unsigned int i = 100; i < 1000; i++) {
        for (unsigned int j = i; j < 1000; j++) {
            unsigned int candidate = i * j;
            if (palindromic(candidate) && candidate > result) {
                result = candidate;
            }
        }
    }
    
    printf("%u\n", result);
    return EXIT_SUCCESS;
}
예제 #3
0
파일: 1024.cpp 프로젝트: WhiteWorld/pat
int main()
{
	scanf("%s%d",nc,&k);
	int len = strlen(nc);

	for(int i=0;i<k;i++){
		if(palindromic(nc,len)){
			printf("%s\n%d\n",nc,i);
			//system("pause");
			return 0;
		}
		char t[N];
		for(int i=0; i< N;i++)
			t[i]='0';

		//printf("%s\n",nc);
		for(int i = 0;i<len;i++){
			t[i] += (nc[i]-'0'+nc[len-1-i]-'0');
			t[i+1] += (t[i]-'0')/10;
			t[i] = '0'+(t[i]-'0')%10;
		}
		
		//if(t[len]=='0')
		//	t[len] = '\0';
		//else
		//	t[len+1] = '\0';
		//printf("t:%s\n",t);

		for(int i=N-1;i>=0;i--){
			if(t[i]!='0'){
				len=i+1;
				break;
			}
		}
		for(int i=len-1;i>=0;i--)
			nc[len-1-i] = t[i];
		nc[len]='\0';

		//printf("nc:%s len: %d\n",nc,len);
	}


	printf("%s\n%d\n",nc,k);

	//system("pause");
	return 0;
}
예제 #4
0
파일: problem04.c 프로젝트: jubalh/euler
int problem4( void )
{
	int i, n;
	char szNum[64];
	int temp=0;
	int biggest=0;
	for (i=999; i>=100; i--)
	{
		for (n=999; n>=100; n--)
		{
			temp = i*n;
			sprintf( szNum, "%d", temp);
			if ( palindromic(szNum) )
			{
				if ( temp > biggest )
					biggest = temp;
			}
		}
	}
	return biggest;
}
    /**
     * @param s input string
     * @return the longest palindromic substring
     */
    string longestPalindrome(string& s) {
        // Write your code here
        //o(n*n)
    //     int re_length = 1;
    //     string result = s.substr(0,1);
    //     for(int i = 0; i < s.size(); ++i){
    //         int start = i - 1;
    //         int end = i + 1;
    //         doWhile(start, end, re_length, result, s);
    //         end = i + 1;
    //         if(end < s.size() && s[i] == s[end]){
    //             start = i;
    //             doWhile(start, end, re_length, result, s);
    //         }
    //         start = i - 1;
    //         if(start > -1 && s[start] == s[i]){
    //             end = i;
    //             doWhile(start, end, re_length, result, s);
    //         }
    //     }
    //     return result;
    // }
    // void doWhile(int start, int end, int& re_length, string& result, string& s){
    //     while(start > -1 && end < s.size() && s[start] == s[end]){
    //         --start;
    //         ++end;
    //     }
    //     if(!(start > -1 && end < s.size())){
    //         ++start;
    //         --end;
    //     }else if(s[start] != s[end]){
    //         ++start;
    //         --end;
    //     }
    //     if(re_length < end - start + 1){
    //         re_length = end - start + 1;
    //         result = s.substr(start, re_length);
    //     }
        //o(n)

        string T = "^";
        if(s.empty()) T += "$";
        else{
            for(auto c : s){
                T += "#";
                T.push_back(c);
            }
            T += "#$";
        }
        int n = T.length();
        int center = 0;
        int right = 0;
        vector<int> palindromic(n, 0);
        for(int i = 1; i < n-1; ++i){
            int i_mirror = 2 * center - i;
            palindromic[i] = (right > i) ? min(right - i, palindromic[i_mirror]) : 0;
            while(T[i + palindromic[i] + 1] == T[i - palindromic[i] - 1])
                ++palindromic[i];
            if(i + palindromic[i] > right){
                center = i;
                right = i + palindromic[i];
            }
        }
        int max_length = 0;
        center = 0;
        for(int i = 0; i < palindromic.size(); ++i){
            if(palindromic[i] > max_length){
                max_length = palindromic[i];
                center = i;
            }
        }
        return s.substr((center - 1 - max_length)/2, max_length);
    }