数位和(PAT)

1.题目描述

把一个整数的各位累加,NowCoder称它为“数位和”。例如正整数123456的数位和是1+2+3+4+5+6=21。现在,请你帮忙计算一个整数n在r进制下的数位和,并用相应的进制输出结果。

2.输入描述:

输入有多组数据。
每组数据包含两个正整数n (1≤n≤2147483647)和r (2≤n≤16)。

3.输出描述:

对应每一组数据,输出十进制正整数n转换成r进制后的数位和,并用r进制输出结果。

4.输入例子:

123456 10
123456 2

5.输出例子:

21
110

6.解题思路:

题意:将输入的十进制转换为r进制后,将r进制数的每位数累加求和,最后再将和转换为r进制
1、既然是十进制转化其他进制,我们只需要辗转相除,将余数累加起来
2、然后将累加的数再次转换进制,将余数转化为字符,存入字符数组
3、最后倒序输出字符数组,即转换后的进制数。

7.源代码:

#include<stdio.h>
int main()
{
	int n,r;
	char s[100];
	while(scanf("%d %d",&n,&r)!=-1)
	{
		int i,k=0,sum=0;
		while(n)
		{
			sum+=n%r;
			n=n/r;
		}
		
		while(sum)
		{
			if(sum%r>=0&&sum%r<=9)
				s[k++]=sum%r+'0';
			else
				s[k++]=sum%r-10+'A';
			sum=sum/r;
			
		}
		for(i=k-1;i>=0;i--)	
			printf("%c",s[i]);
		printf("\n");
	}
	return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务