题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1197
题目描述:
思路
题目要求的目的就是找出大于等于2992的四位数,然后满足他们十进制的每个位的数字之和等于16进制的位数和,且等于12进制的位数和。例如:2992的十进制位数和为22,那么16进制为BAF,其和为22;该数12进制为的位数和也为22。所以2992满足条件要输出。
AC代码
#include<stdio.h>
int hex(int num){//用来记录十六进制位数之和
int sum = 0;
while(1){
if(num==0){
break;
}
sum+=num%16;
num = num/16;
}
return sum;
}
int base12(int num){//用来记录十二进制位数之和
int sum = 0;
while(1){
if(num==0){
break;
}
sum+=num%12;
num = num/12;
}
return sum;
}
int judgenum(int num){//用来判断这个数是否符合条件
int sum = 0;
int init = num;
for(int i = 0;i < 4;i++){
sum += num%10;
num = num/10;
}
if(sum==hex(init)&&sum==base12(init)){
return 1;
}else{
return 0;
}
}
int main(){
int num;
for(int i=2992;i<10000;i++){
if(judgenum(i)){
printf("%d\n",i);
}
}
return 0;
}