进制转换
十进制转其他进制(2~16)
一的个数
题目描述:
NowCoder总是力争上游,凡事都要拿第一,所以他对“1”这个数情有独钟。爱屋及乌,他也很喜欢包含1的数,例如10、11、12……。不仅如此,他同样喜欢任意进制中包含1的数。当然,其中包含1的个数越多他越喜欢。你能帮他统计一下某个数在特定的进制下1的个数吗?
输入描述:
输入有多组数据,每组数据包含一个正整数n (1≤n≤2147483647)和一个正整数r (2≤r≤16)。
其中n为十进制整数,r为目标进制。
输入例子:
1 2
123 16
输出例子:
1
0
代码:
#include <stdio.h>
int main(void){
unsigned int n,r;
while(scanf("%u%u",&n,&r)!=EOF){
int count = 0;
while(n){
if(n%r==1)
++count;
n/=r;
}
printf("%u\n",count);
}
return 0;
}
外星人的语言
题目描述:
nowcoder费了很大劲,终于和地外文明联系上。我们地球人通常有10根手指,因此我们习惯用10进制的数,而外星人的手指有16跟、8根等不等的数目,因此他们使用与我们不同的进制。为了方便沟通,需要你开发一款工具,把地球人的10进制转换成外星人的R进制形式。
输入描述:
输入有多行。
每行包括两个正整数n和R,其中2≤R≤16。
输入直到文件结束为止。
输入例子:
1989 2
1119 16
输出例子:
11111000101
45F
思路:
由于进制转换后,每一位需要倒置输出,所以可以考虑用递归的方法
代码:
#include <stdio.h>
void tenToR(int n,int r);
int main(void){
int n,r;
while(scanf("%d%d",&n,&r)!=EOF){
tenToR(n,r);
printf("\n");
}
return 0;
}
void tenToR(int n,int r){
if(n){
int remainder = n%r;
tenToR(n/r,r);
if(remainder<10)
printf("%d",remainder);
else
printf("%c",remainder-10+'A');
}
}