One Day One Step 之Dual Palindromes

这一道题跟上一道十分的接近,没有什么可说的~

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 10000

void transtostr( int num, int base, char * numtostring )
{
    int i = 0;

    while( num > 0 )
    {
        *( numtostring + i ) = ( num % base ) + '0';
        num /= base;
        i++;
    }
}

int isPalindromic( char * str, int len )
{
    int i;
    int isP = -1;

    for( i = 0; i <= len / 2; i++ )
    {
        if( *( str + i ) != *( str + len - 1 - i ) )
        {
            isP = 0;
            break;
        }
    }

    return isP == 0 ? -1 : 1;
}

int main()
{
    FILE * fin = freopen( "dualpal.in", "r", stdin );
    FILE * fout = freopen( "dualpal.out", "w", stdout );
    unsigned int startnum;
    int amountneed;
    int tmp_need = 0;
    int tmp_base;
    int tmp_num;
    int tmp_time = 0;
    char tmp_str[ N ] = {0};
    int tmp_len;

    fscanf( fin, "%d%u", &amountneed, &startnum );

    for( tmp_num = startnum + 1; tmp_need < amountneed; tmp_num++ )
    {
        for( tmp_base = 2, tmp_time = 0; tmp_time < 2 && tmp_base <= 10; tmp_base++ )
        {
            memset( tmp_str, 0, N );
            transtostr( tmp_num, tmp_base, tmp_str );
            tmp_len = strlen( tmp_str );
            if( isPalindromic( tmp_str, tmp_len ) == 1 )
            {
                tmp_time++;
            }
        }
        if( tmp_time == 2 )
        {
            tmp_need++;
            fprintf( fout, "%d\n", tmp_num );
        }
    }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值