Project Euler task 38
Take the number 192 and multiply it by each of 1, 2, and 3:
192 1 = 192
192 2 = 384
192 3 = 576
By concatenating each product we get the 1 to 9 pandigital, 192384576. We will call 192384576 the concatenated product of 192 and (1,2,3)
The same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5, giving the pandigital, 918273645, which is the concatenated product of 9 and (1,2,3,4,5).
What is the largest 1 to 9 pandigital 9-digit number that can be formed as the concatenated product of an integer with (1,2, ... , n) where n 1?
---------------------------------------------------------------
#include < iostream >
using namespace std;
typedef unsigned long long int uint64;
typedef unsigned short int uint16;
const uint64 lMax = 10000;
const uint64 lMin = 2;
int getLength(uint64 _n) {
int iLength = 0;
while (_n) {
iLength++;
_n /= 10;
}
return iLength;
}
uint16 setBits(uint64 _n) {
uint16 uiRes = 0;
while (_n) {
if ((_n % 10) == 0) {
_n /= 10;
continue;
}
uiRes ^= 1 << ((_n % 10) - 1);
_n /= 10;
}
return uiRes;
}
int main() {
int a = 0;
for (uint64 i = lMin; i < lMax; i++) {
int nSum = 0;
int iMult = 1;
uint16 iRes = 0;
while (nSum < 9) {
uint64 uiNum = i * iMult;
iRes ^= setBits(uiNum);
nSum += getLength(uiNum);
iMult++;
}
int nTotal = 0;
if (nSum == 9 && iRes == 0x01FF) {
for (int m = 1; m < iMult; m++)
cout << i * m;
cout << endl;
}
}
return 0;
}
Comments