问题链接:HDU2097 Sky数。入门练习题,用C语言编写程序。
问题简述:参见上述链接。
问题分析:进制转换问题,通常用除运算(/)和取余数运算(%)来实现。
程序说明:程序中,使用数组scale[]是为了提高程序的通用性。改变该数组的内容,就可以改变程序的功能,而不需要修改程序。
AC的C语言程序如下:
/* HDU2097 Sky数 */
#include <stdio.h>
// 数字之和:将10进制的val转为base进制,并对各位求和
int digitsum(int val, int base)
{
int sum = 0;
while(val) {
sum += val % base;
val /= base;
}
return sum;
}
int main(void)
{
int n, sum, skyflag, i;
int scale[] = {16, 12};
while(scanf("%d", &n) != EOF) {
// 判定结束条件;
if(n == 0)
break;
// 计算各位之和
sum = digitsum(n, 10);
// Sky数判定
skyflag = 1;
int len = sizeof(scale) / sizeof(int);
for(i=0; i<len; i++)
if(digitsum(n, scale[i]) != sum) {
skyflag = 0;
break;
}
// 输出结果
if(skyflag)
printf("%d is a Sky Number.\n", n);
else
printf("%d is not a Sky Number.\n", n);
}
return 0;
}