单点时限: 2.0 sec
内存限制: 512 MB
问题描述
输入格式
输出格式
对于每个问题,输出一行问题的编号(0 开始编号,格式:case #0: 等),然后在一行中输出用 r 进制表示的十进制正整数 n 转换成 r 进制后的数位和。
样例:
input:
2 123456 10 123456 2output:
case #0: 21 case #1: 110
提示:
当r进制大于10时,用大写字母A-F表示大于10的数字。
例如:十进制数29转换为16进制为 1D,此时数位和为14,则正确的输出应为:E
问题分析:
提示:
注意点:比较简单的进制转换
考察点:
代码解决部分:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>>
typedef long long int lli;
int add(int n,int r)
{
if(n==0) return 0;
int result=0;
while(n!=0)
{
result+=n%r;
n/=r;
}
return result;
}
void print(int result ,int r)
{
if(result==0) printf("0\n");
char s[100];
memset(s,100,'\0');
int i=0;
while(result!=0)
{
s[i++]=(result%r)>=10?'A'+(result%r-10):('0'+result%r);
result/=r;
}
for(int j=i-1;j>=0;j--)
printf("%c",s[j]);
putchar('\n');
}
int main()
{
int t;
scanf("%d",&t);
for(int i=0;i<t;i++)
{
int n;
int r;
scanf("%d%d",&n,&r);
int result=add(n,r);
// printf("result=%d\n",result);
printf("case #%d:\n",i);
print(result,r);
}
return 0;
}
解释: