dualpal

Dual Palindromies

简述:
这个和前一题很像,是找出从S+1开始的在2-10进制里面有两种进制下是回文串的前N个数,输出。

代码:

#include 
#include 
int ispali(int x);
int main(void)
{
    freopen("dualpal.in", "r", stdin);
    freopen("dualpal.out", "w", stdout);
    int i, n, s, cnt = 0;
    scanf("%d %d", &n, &s);
    for(i = s + 1; cnt < n;i++)
        if(ispali(i))
        {
            cnt++;
            printf("%d\n", i);
        }
    return 0;
}
int ispali(int x)
{
    int a[40];
    int i, j, flag = 0;
    for(i = 2; i < 11; i++)
    {
        int t = x, cnt = 0;
        memset(a, 0, sizeof(a));
        while(t > 0)
        {
            a[cnt++] = t % i;
            t /= i;
        }
        for(j = 0; j < cnt / 2; j++)
            if(a[j] != a[cnt - 1 -j])
                break;
        if(j >= cnt / 2)
        {
            if(!flag)
                flag++;
            else
                break;
        }
    }
    if(i < 11)
        return 1;
    else
        return 0;
}

你可能感兴趣的:(USACO)