码迷,mamicode.com
首页 > 其他好文 > 详细

UVALive2389 ZOJ1078 Palindrom Numbers

时间:2016-08-03 20:30:42      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

Regionals 2001 >> Latin America - South America

题链接:UVALive2389 ZOJ1078 Palindrom Numbers入门训练题,用C语言编写程序。

题意简述:输入若干个整数,0作为结束。对于输入的整数n,问其几进制为回文数?

这是一个有关进制处理的问题,都是套路。

程序中,封装了一个函数ispalindrom()用于将整数转换为指定进制的字符串,同时判断是否为回文数。使用数组ans[]作为标志,其元素个数需要多一个,是否为回文数的标志放在ans[0]中。

AC的C语言程序如下:

/* UVALive2389 ZOJ1078 Palindrom Numbers */

#include <stdio.h>
#include <memory.h>

#define MAXN1 20000
#define MAXN2 16

char t[MAXN1];

int ispalindrom(int val, int base)
{
    int count=0, start, end;

    while(val) {
        t[count++] = val % base;
        val /= base;
    }

    start = 0;
    end = count - 1;
    count = 1;
    while(start < end) {
        if(t[start] != t[end]) {
            count = 0;
            break;
        }

        start++;
        end--;
    }

    return count;
}

int main(void)
{
    int n, i;
    int ans[MAXN2+1];

    while(scanf("%d", &n) != EOF && n != 0) {
        memset(ans, 0, sizeof(ans));

        for(i=2; i<=MAXN2; i++)
            if(ispalindrom(n, i)) {
                ans[0] = 1;
                ans[i] = 1;
            }

        if(ans[0]) {
            printf("Number %d is palindrom in basis", n);
            for(i=2; i<=MAXN2; i++)
                if(ans[i])
                    printf(" %d", i);
            printf("\n");
        } else
            printf("Number %d is not palindrom\n", n);
    }

    return 0;
}


UVALive2389 ZOJ1078 Palindrom Numbers

标签:

原文地址:http://blog.csdn.net/tigerisland45/article/details/52099977

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!