*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
lcy   |   We have carefully selected several similar problems for you:  2032 2033 2035 2034 2039 
 
 
 
要注意以下几点:
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);
    }
}

 

posted on 2020-03-29 12:34  沈香茶  阅读(140)  评论(0)    收藏  举报