数位和(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;
}