本文主要是介绍九度OJ 1080:进制转换 (进制转换),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 题目描述:
-
将M进制的数X转换为N进制的数输出。
- 输入:
-
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
- 输出:
-
输出X的N进制表示的数。
- 样例输入:
-
16 10 F
- 样例输出:
-
15
- 提示:
-
输入时字母部分为大写,输出时为小写,并且有大数据。
- 来源:
- 2008年清华大学计算机研究生机试真题
思路:
典型进制转换题,直接看代码就行。
需要做一个字符转数字的函数。
a-z分别代表10-35.
代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define M 1000int iszero(char s[M], int n)
{for (int i=0; i<n; i++){if(s[i] != '0')return 0;}return 1;
}int ctoi(char c)
{if ('A' <= c)return c-'A'+10;elsereturn c-'0';
}char itoc(int i)
{if (10 <= i)return i-10+'A';elsereturn i+'0';
}int main(void)
{int m, n, i, k, left, flag;char s1[M], s2[M];int len1;while (scanf("%d%d%s", &m, &n, s1) != EOF){len1 = strlen(s1);k = 0;flag = 0;if (s1[0] == '-'){s1[0] = '0';flag = 1;}if (iszero(s1, strlen(s1))){printf("0\n");continue;}while (! iszero(s1, len1)){left = 0;for (i=0; i<len1; i++){int tmp = left*m+ctoi(s1[i]);left = tmp%n;s1[i] = itoc(tmp/n);}//printf("left=%d\n", left);s2[k++] = itoc(left);}s2[k] = '\0';if (flag == 1)printf("-");for (i=strlen(s2)-1; i>=0; i--){if ('A' <= s2[i])s2[i] += 'a'-'A';printf("%c", s2[i]);}printf("\n");}return 0;
}
/**************************************************************Problem: 1080User: liangrx06Language: CResult: AcceptedTime:70 msMemory:912 kb
****************************************************************/
这篇关于九度OJ 1080:进制转换 (进制转换)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!