各进制转换 c语言
g=0; if(x<0) /*为负数输入做标记*/ { x=-x; g=1; } s=x/y; 根据给定的信息,我们可以分析出该段代码是用于实现不同进制之间转换的功能,特别是将十进制数转换为其他指定进制(2到16之间的任意进制)的算法。接下来,我们将深入探讨其中涉及的关键知识点。 ### 各进制转换原理 在计算机科学中,数的不同进制表示是非常重要的概念。常见的进制包括二进制(基数为2)、八进制(基数为8)、十进制(基数为10)和十六进制(基数为16)。不同的进制有不同的应用场景:例如二进制是计算机内部处理数据的基本方式,而十六进制则常用于表示颜色代码等。 #### 进制转换方法 进制转换通常有两种方法:除基取余法和乘基累加法。本例中采用的是除基取余法来实现从十进制到其他进制的转换。 ### C语言实现各进制转换 #### 代码解析 我们来看一下关键代码段: ```c int main() { int i = 0, j = 0, x, y, g, s, u; char a[100]; while (scanf("%d%d", &x, &y) == 2) { g = 0; if (x < 0) { x = -x; g = 1; } s = x / y; u = x % y; if (y >= 10) { for (i = 0; ; i++) { if (u < 10) { a[i] = 48 + u; } else { a[i] = 55 + u; } if (s == 0) break; u = s % y; s = s / y; } } else { for (i = 0; ; i++) { a[i] = 48 + u; if (s == 0) break; u = s % y; s = s / y; } } if (g == 0) { for (j = i; j >= 0; j--) { printf("%c", a[j]); } printf("\n"); } else { printf("-"); for (j = i; j >= 0; j--) { printf("%c", a[j]); } printf("\n"); } } } ``` 1. **输入处理**: - `scanf("%d%d", &x, &y)`:读入两个整数`x`和`y`,分别代表待转换的十进制数和目标进制。 - 如果`x`为负数,则将其转换为正数,并设置标志`g`为1,以便后续输出时添加负号。 2. **转换过程**: - 首先计算商`s`和余数`u`。 - 使用循环不断进行除基取余操作,直到商为0为止。 - 对于`y >= 10`的情况,使用字符数组`a[]`存储结果,对于大于等于10的数字,使用ASCII码对应的字符表示(例如10转换为'A',11转换为'B'等)。 3. **输出结果**: - 通过`printf()`函数逆序输出字符数组`a[]`中的内容。 ### 关键知识点总结 1. **进制转换算法**:使用除基取余法来实现从十进制到其他进制的转换。 2. **负数处理**:通过设置标志位`g`来处理负数的情况,在输出时加上负号。 3. **字符与数字的转换**:利用ASCII码表中的特性,通过加上固定的数值来实现数字与字符之间的转换。 4. **循环控制结构**:使用`for`循环和`break`语句控制转换过程,确保准确地完成转换任务。 5. **输入输出处理**:利用`scanf()`和`printf()`函数进行数据的输入输出操作,注意格式控制符的正确使用。 这段代码通过简单的逻辑实现了从十进制到指定进制的转换功能,同时考虑到了负数和大进制(如十六进制)的特殊处理,是一段典型的进制转换程序示例。
Time Limit:1000MS Memory Limit:32768K
Total Submit:23 Accepted:11
Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2
23 12
-4 3
Sample Output
111
- silverstar662015-03-15不错 很好的资源
- 粉丝: 0
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助