*HDoj 2031 进制转换
Problem 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
1B
-11
Author
lcy
Source
Recommend
要注意以下几点:
1学会memset函数的使用,而且使用时要包含头文件 <string.h>
2在C语言中求绝对值函数 int abs(int n); 在头文件 <stdlib.h> 中,而 double fabs(double x); 在 <math.h>中;
在C++中两者都在<cmath>中,因此C++中只需要包括<cmath>即可。
C语言代码如下:
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int n,r,l; char s[30]; char temp; memset(s,0,30); int flag=0; while(scanf("%d%d",&n,&r)!=EOF) { l=0; flag=0; memset(s,0,30); if(n<0) { flag=1; n=abs(n); } while(n!=0) { if(n%r>=10) s[l++]='A'+(n%r-10); else s[l++]='0'+n%r; n/=r; } for(int i=0;i<(int)strlen(s)/2;i++) { temp=s[i]; s[i]=s[strlen(s)-i-1]; s[strlen(s)-i-1]=temp; } if(flag) printf("-"); printf("%s\n",s); } }
浙公网安备 33010602011771号