#include<iostream>
#include<math.h>
using namespace std;
int hex(int);
int duo(int);
int dec(int);
int main() {
int val1, val2, val3;
for (int i = 2991; i < 10000; i++) {
val1 = hex(i);
val2 = duo(i);
val3 = dec(i);
if (val1==val2&&val3==val1&&val2==val3) {
cout << i << endl; ;
}
}
return 0;
}
int hex(int initial) {
int sum=0;
int coe = pow(16, 3);
for (int rem = initial; coe > 0; coe /= 16) {
sum = sum+(rem / coe);
if (rem / coe) {
rem -= rem/coe*coe;;
}
}
return sum;
}
int duo(int initial)
{
int sum = 0, coe = pow(12, 3);
for (int rem = initial; coe > 0; coe /= 12) {
sum += (rem / coe);
if(rem/coe)
rem -= rem/coe*coe;
}
return sum;
}
int dec(int initial) {
int sum = 0, coe = pow(10, 3);
for (int rem = initial; coe > 0; coe /= 10) {
sum += (rem / coe);
if(rem/coe)
rem -= rem/coe*coe;
}
return sum;
}
下面是题目:
找到并列出所有具有这样特性的十进制的四位数:其4位数字的和等于这个数字以十六进制表示时的4位数字的和,也等于这个数字以十二进制表示时的4位数字的和。
例如:十进制整数2991的四位数字之和是2+9+9+1=21,因为2991=1*1728+8*144+9*12+3,所以其十二进制表示为1893(12),4位数字之和也是21。但是2991的十六进制表示为BAF(16),并且11+10+15=36,所以2991被程序排除了。
输入:
本题没有输入。
输出:
输出为2992和所有比2992大的满足需求的4位数字(以严格的递增序列),每个数字一行,数字前后不加空格,以行结束符结束。输出没有空行。
新来csdn的学生党,求大佬讲解