HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking

Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 4772   Accepted: 2141

Description

The Really Neato Calculator Company, Inc. has recently hired your team to help design their Super Neato Model I calculator. As a computer scientist you suggested to the company that it would be neato if this new calculator could convert among number bases. The company thought this was a stupendous idea and has asked your team to come up with the prototype program for doing base conversion. The project manager of the Super Neato Model I calculator has informed you that the calculator will have the following neato features: 

  • It will have a 7-digital display. 
  • Its buttons will include the capital letters A through F in addition to the digits 0 through 9. 
  • It will support bases 2 through 16. 

Input

The input for your prototype program will consist of one base conversion per line. There will be three numbers per line. The first number will be the number in the base you are converting from. The second number is the base you are converting from. The third number is the base you are converting to. There will be one or more blanks surrounding (on either side of) the numbers. There are several lines of input and your program should continue to read until the end of file is reached.

Output

The output will only be the converted number as it would appear on the display of the calculator. The number should be right justified in the 7-digit display. If the number is to large to appear on the display, then print ``ERROR'' (without the quotes) right justified in the display.

Sample Input

1111000  2 10
1111000  2 16
2102101  3 10
2102101  3 15
  12312  4  2
     1A 15  2
1234567 10 16
   ABCD 16 15

Sample Output

    120
     78
   1765
    7CA
  ERROR
  11001
 12D687
   D071

Source


Regionals 1995 >> North America - Mid-Central USA


问题链接HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking

问题简述:参见上文。

问题分析:每行给出一个数、进制和目标进制,对数进行进制转换,输出一个长度不大于7的值。

一个纯粹进制转换题,需要懂得进制的原理,熟悉atoi()和itoa()的实现过程。

另外需要注意的是,值的范围和输入输出格式。

程序说明:(略)


AC的C语言程序如下:

/* HDU1335 POJ1546 Basically Speaking */

#include <stdio.h>

#define LEN 7

// 进制转换:将frombase进制的s[]转换为tobase进制,并且输出
void changeoutput(char s[], int frombase, int tobase)
{
    long long result = 0;
    char t[64], *p;
    int count;

    // atoi:字符串转换为整数,基数为frombase
    p = s;
    while(*p) {
        result *= frombase;
        if('0' <= *p && *p <= '9')
            result += *p - '0';
        else if('A' <= *p && *p <= 'F')
            result += *p + 10 - 'A';
        p++;
    }

    // itoa:整数转换为字符串,基数为tobase
    count = 0;
    while(result) {
        int val = result % tobase;
        if(0 <= val && val <= 9)
            t[count] = val + '0';
        else if(10 <= val && val <= 15)
            t[count] = val - 10 + 'A';
        result /= tobase;
        count++;
    }

    // 输出结果
    if(count == 0)
        printf("      0\n");
    else if(count > LEN)
        printf("  ERROR\n");
    else {
        int i;
        // 补足空格
        for(i=count; i<LEN; i++)
            t[i] = ' ';
        // 逆序输出
        for(i=LEN-1; i>=0; i--)
            putchar(t[i]);
        putchar('\n');
    }
}

int main(void)
{
    int frombase, tobase;
    char s[1024];
    
    while(scanf("%s%d%d", s, &frombase, &tobase) != EOF) {
        changeoutput(s, frombase, tobase);
    }
    
    return 0;
}


posted on 2016-07-25 20:15  海岛Blog  阅读(244)  评论(0编辑  收藏  举报

导航