【HDOJ 2031】 进制转换
来源:互联网 发布:质谱软件 编辑:程序博客网 时间:2024/06/06 19:20
Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 223 12-4 3
Sample Output
1111B-11
AC代码:#include <stdio.h>#include <math.h>#include <string.h>#define LEN strlen(str)int main(){ int n,r,i,m; char str[20]; while (~(scanf("%d%d",&n,&r))){ memset(str,0,sizeof(str)); m = fabs(n); for (i = 0;m;i++){ if ((str[i]=m%r) == 10) str[i] = 'A'; else if ((str[i]=m%r) == 11) str[i] = 'B'; else if ((str[i]=m%r) == 12) str[i] = 'C'; else if ((str[i]=m%r) == 13) str[i] = 'D'; else if ((str[i]=m%r) == 14) str[i] = 'E'; else if ((str[i]=m%r) == 15) str[i] = 'F'; else str[i] = m%r + '0'; m /= r; } if (n < 0) putchar('-'); for (i = LEN-1;i >= 0;--i) putchar(str[i]); putchar('\n'); } return 0;}
A better version:#include <iostream>using namespace std;int main(){ char str[17]="0123456789ABCDEF";//用一个字符型数组存好"0123456789ABCDEF"【巧妙】 int n,m,i,j; int r[20]; while(~scanf("%d%d",&n,&m)){ i = 0; if(n < 0){//如果n<0,则输出负号,然后把n变成整数 printf("-"); n = -n; } while(n){//用除R取余法模拟,并把余数放到数组里面 r[i] = n%m; n /= m; i++; } for(j = i-1;j >= 0;j--) printf("%c",str[r[j]]); printf("\n"); } return 0;}
复制去Google翻译翻译结果
一个更好的版本:
0 0
- hdoj 2031 进制转换
- hdoj 2031 进制转换
- HDOJ 2031 进制转换
- 【HDOJ 2031】 进制转换
- [HdOJ]2031 进制转换
- HDOJ 2031 进制转换
- hdoj 2031进制转换
- HDOJ-2031 进制转换
- HDOJ 2031 进制转换
- HDOJ 2031 进制转换
- hdoj 2031 进制转换
- HDOJ 2031 进制转换
- hdoj 2031进制转换
- 进制转换 hdoj-2031
- HDOJ 2031 进制转换
- HDOJ 2031 进制转换
- hdoj进制转换
- hdoj.2031 进制转换 20140729
- uva 10759(数论)
- 利用数组作为缓存池实现对象的缓存
- 深入解析NoSQL数据库的分布式算法
- pip 在windows下的更新升级
- 刷新和加载
- 【HDOJ 2031】 进制转换
- 在已有Windows 7/8/8.1的PC上装Ubuntu14.04双系统的安装指南及常见问题
- 调用Android系统相册并裁剪图片
- python win32 Workbooks.Open path error
- Zookeeper(一)简介
- 退出整个应用程序 以及 利用intent标志跳转到某个Activity
- C#学习笔记(一)
- java内省
- 第二篇