打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
题目1130: 数制转换
题目描述

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。


输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。


输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。


样例输入
4 123 10

样例输出
27

提示 [+]

*** 提示已隐藏,点击上方 [+] 可显示 ***


来源

【思路】

 



  1. /********************************* 
  2. *   日期:2013-2-19 
  3. *   作者:SJF0115 
  4. *   题号: 天勤OJ 题目1130: 数制转换 
  5. *   来源:http://acmclub.com/problem.php?id=1130 
  6. *   结果:AC 
  7. *   来源:2008年北京大学图形实验室计算机研究生机试真题 
  8. *   总结: 
  9. **********************************/  
  10. #include <string.h>  
  11. #include <stdio.h>  
  12.   
  13. char str[1001];  
  14. char ans[1001];  
  15. /* 
  16. * 转换为十进制 
  17. *  str是a进制数字 
  18. */  
  19. long long int ToD(int a){  
  20.     int c,len,i;  
  21.     long long int sum,w;  
  22.     len = strlen(str);  
  23.     //转换为十进制的数字  
  24.     sum = 0;  
  25.     //权值  
  26.     w = 1;  
  27.     //从低位到高位遍历每一个数字  
  28.      for(i = len-1;i >= 0;i--){  
  29.          //0 - 9  
  30.         if(str[i] >= '0' && str[i] <= '9'){  
  31.             c = str[i] - '0';  
  32.         }  
  33.         //A - F  
  34.         else if(str[i] >= 'A' && str[i] <= 'F'){  
  35.             c = str[i] - 'A' + 10;  
  36.         }  
  37.         //a - f  
  38.         else{  
  39.             c = str[i] - 'a' + 10;  
  40.         }  
  41.         //累加该位数字和该位数字的权值的积  
  42.         sum  +=  c * w;  
  43.         //进制权值  
  44.         w *= a;  
  45.      }  
  46.     return sum;  
  47. }  
  48. /* 
  49. * 十进制数字num转换为b进制数字,并用ans存储 
  50. */  
  51. int ToAny(long long int num,int b){  
  52.     int index = 0,c;  
  53.     do{  
  54.         //计算该位数字  
  55.         c = num % b;  
  56.         //将数字转换为字符  
  57.         ans[index++] = (c < 10) ? (c + '0') : (c - 10 + 'A') ;  
  58.         num /= b;  
  59.     }while(num);  
  60.     return index;  
  61. }  
  62. int main()  
  63. {  
  64.     long long int c;  
  65.     int len,a,b,i;  
  66.     while(scanf("%d %s %d",&a,str,&b) != EOF){  
  67.         //转换为十进制  
  68.         c = ToD(a);  
  69.         //转换为b进制  
  70.         len = ToAny(c,b);  
  71.         //输出  
  72.         for(i = len-1;i >= 0;i--){  
  73.             printf("%c",ans[i]);  
  74.         }  
  75.         printf("\n");  
  76.     }  
  77.     return 0;  
  78. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
2015年高考全国卷1理科数学第12题分析
小学数学:题目如此简单,解法如此复杂,请高手来个巧解!
六年级:美妙数学之“分数乘法拓展(1)”(0903六)
一个7个7的数学题目,训练你的数学思维
《趣味代数学》邮票的数量
来自全国联赛的一道代数题目,不确定来试一试么?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服