本帖最后由 69042011 于 2014-6-14 13:45 编辑
- /*
- 实现输入任何十进制,转化为2-16进制
- 思路:根据进制转化的思想来考虑
- 1.根据转化思想然后转化为条件 循环语句来实现
- (输入十进制数对其输入的R进制数求余得到的存入数组,然后对十进制数取整,循环。得到数组中的数就是R进制的反序的数,然后通过
- 循环得到最后答案)
- 2.构造整体框架
- (需要的循环 条件等等结构 用switch来解决10-15转化为abcde的问题)
- 3.补充代码
- (2-10进制是一类 11-16进制是一类)
- 4检查分析中间漏洞
- (比如条件上的严谨问题,范围,输出的范围等等)
- 注:我也才学,希望不足之处多多指出,可能很多地方没有很好的优化,共同进步吧!
- */
- #include <stdio.h>
- int system(int,int);
- int main()
- {
- int a1,s1;
- printf("请输入十进制数:\n");
- scanf("%d",&a1);
- printf("请输入要转化的进制数:\n");
- scanf("%d",&s1);
- system(a1,s1);
- return 0;
- }
- int system(int a,int s)
- {
- int ages[20] = {0};
- int k = 0;
- int a2 = a;
- if (s > 16)
- {
- printf("超出16进制!");
- }
- else if (s > 10)
- {
- while (a2)
- {
- ages[k] = a2 % s;
- a2 = a2 / s;
- switch (ages[k])
- {
- case 10:
- ages[k] += 87;
- break;
- case 11:
- ages[k] += 87;
- break;
- case 12:
- ages[k] += 87;
- break;
- case 13:
- ages[k] += 87;
- break;
- case 14:
- ages[k] += 87;
- break;
- case 15:
- ages[k] += 87;
- break;
- default:
- ages[k] += 48;
- break;
- }
- k++;
- }
- printf("十进制数:%d 转化为%d进制数是:",a,s);
- for (k = k-1;k >= 0 ;k--)
- {
- printf("%c",ages[k]);
- }
-
- }
- else
- {
- //因为a = a/s所以存在a=0,即退出循环
- while (a2)
- {
- ages[k] = a2 % s;
- k++;
- a2 = a2 / s;
- }
- printf("十进制数:%d 转化为%d进制数是:",a,s);
- for (k = k-1;k >= 0 ;k--)
- {
- printf("%d",ages[k]);
- }
- }
- printf("\n");
-
- }
复制代码
|