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; }