zoukankan      html  css  js  c++  java
  • UVALive2389 ZOJ1078 Palindrom Numbers【回文+进制】

    Palindrom Numbers

    Time Limit: 2 Seconds      Memory Limit: 65536 KB

    Statement of the Problem

    We say that a number is a palindrom if it is the sane when read from left to right or from right to left. For example, the number 75457 is a palindrom.

    Of course, the property depends on the basis in which is number is represented. The number 17 is not a palindrom in base 10, but its representation in base 2 (10001) is a palindrom.

    The objective of this problem is to verify if a set of given numbers are palindroms in any basis from 2 to 16.

    Input Format

    Several integer numbers comprise the input. Each number 0 < n < 50000 is given in decimal basis in a separate line. The input ends with a zero.

    Output Format

    Your program must print the message Number i is palindrom in basis where I is the given number, followed by the basis where the representation of the number is a palindrom. If the number is not a palindrom in any basis between 2 and 16, your program must print the message Number i is not palindrom.

    Sample Input

    17
    19
    0

    Sample Output

    Number 17 is palindrom in basis 2 4 16
    Number 19 is not a palindrom


    Source: South America 2001



    Regionals 2001 >> Latin America - South America


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

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

    问题分析

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

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

    程序说明

    原来的C语言程序不够简洁,又写了一版C++的程序。

    UVALive的问题与ZOJ的问题微妙的差异需要注意,ZOJ中不存在回文时,输出的字符串为:“Number 19 is not a palindrom”,多一个“a”,坑啊!!!


    AC的C++语言程序如下:

    /* UVALive2389 ZOJ1078 Palindrom Numbers */
    
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    const int N = 16;
    
    bool ispalindrome(int product, int base)
    {
        int miror = 0, temp;
    
        temp = product;
        while(temp) {
            miror *= base;
            miror += temp % base;
    
            temp /= base;
        }
    
        return miror == product;
    }
    
    int main()
    {
        int n;
        int ans[N+1];
    
        while(cin >> n && n) {
            memset(ans, 0, sizeof(ans));
    
            for(int i=2; i<=N; i++)
                if(ispalindrome(n, i))
                    ans[0] = 1, ans[i] = 1;
    
            if(ans[0]) {
                cout << "Number " << n << " is palindrom in basis";
                for(int i=2; i<=N; i++)
                    if(ans[i])
                        cout << " " << i;
                cout << endl;
            } else
                cout << "Number " << n << " is not palindrom" << endl;
        }
    
        return 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("
    ");
            } else
                printf("Number %d is not palindrom
    ", n);
        }
    
        return 0;
    }


  • 相关阅读:
    CodeForces 156B Suspects(枚举)
    CodeForces 156A Message(暴力)
    CodeForces 157B Trace
    CodeForces 157A Game Outcome
    HDU 3578 Greedy Tino(双塔DP)
    POJ 2609 Ferry Loading(双塔DP)
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛 19000互质的个数
    Java 第十一届 蓝桥杯 省模拟赛十六进制转换成十进制
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564497.html
Copyright © 2011-2022 走看看