问题链接: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); else printf("%d is not a Sky Number. ", n); } return 0; }