本帖最后由 代号-K 于 2020-3-12 15:49 编辑
经过了几个小时的努力,终于想出了最优的方法
1: 9 = 1 * 9
2: 9009 = 91 * 99
3: 906609 = 913 * 993
4: 98100189 = 9811 * 9999
5: 2811991182 = 34034 * 82623
6 位之后电脑不支持了#define BIT_FLAG 5
#define BIT_MAX (BIT_FLAG+1)*2 - 1
#define BIT_MIN BIT_FLAG*2 - 1
#define MAX_NUM 9
void getHuiWen(int k, int *array, int m, ElementType *result)
{
int n = k - 1 - m;
if(m <= n)
{
int i;
for(i = 1; i <= MAX_NUM; i++)
{
array[m] = i;
array[n] = i;
int j = 0;
ElementType sum = 0;
while( j < k)
{
//printf("%d", array[j]);
sum += array[j]*int(pow(10,k-j-1));
j++;
}
// optimization
if(*result >= sum)
{
if(*result >= sum * 10)
{
return;
}
continue;
}
j = int (pow(10, BIT_FLAG - 1));
while(j <= int (pow(10, BIT_FLAG) - 1))
{
if(sum % j == 0)
{
//printf("%d\n", sum);
int ret;
ret = (sum / j) / int (pow(10, BIT_FLAG - 1));
if(ret > 0 && ret < 10)
{
ret = sum / j;
printf("%lld = %d * %d\n", sum, j, ret);
*result = sum;
break;
}
}
j++;
}
//clear numbers in middle
if(i == MAX_NUM)
{
j = 1;
while( j < k-1)
{
array[j] = 0;
j++;
}
}
//ecursive
getHuiWen(k, array, m+1, result);
}
}
}
int main(int argc, char *argv[])
{
int k = BIT_MAX;
int array[BIT_MAX] = {0};
ElementType ret = -1;
for(; k >= BIT_MIN; k--)
{
getHuiWen(k, array, 0, &ret);
}
//int sum = calculateCircle();
printf("%lld\n",ret);
return 0;
}
|