2019년 4월 13일 토요일

# 1000개의 숫자에서 13자리 조합을 구해 자릿수를 모두 곱한 것중 가장큰 조합은?

# 오일러 프로젝트를 해보고 있다. 몇문제 푸는중에... Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product? 이런 문제가 있었다. 그래서 아래와 같은 방법으로 풀긴 했다.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <fstream>
#include <Windows.h>

using namespace std;

void ReadFile(char* seriseNumber);
void char_To_int(char* seriseNumber, int* intSeriseNumber);

void ReadFile(char* seriseNumber)
{
 ifstream file;

 file.open("C:\\numbers.txt");
 
 if (file.is_open() == true)
 { 
  file >> seriseNumber;
  file.close();
 }
}

void char_To_int(char* char_seriseNumber, int* int_SeriseNumber)
{
 for (int i = 0; i < 1000; ++i)
 {
  switch (char_seriseNumber[i])
  {
  case 48:
   int_SeriseNumber[i] = 0;
   break;
  case 49:
   int_SeriseNumber[i] = 1;
   break;
  case 50:
   int_SeriseNumber[i] = 2;
   break;
  case 51:
   int_SeriseNumber[i] = 3;
   break;
  case 52:
   int_SeriseNumber[i] = 4;
   break;
  case 53:
   int_SeriseNumber[i] = 5;
   break;
  case 54:
   int_SeriseNumber[i] = 6;
   break;
  case 55:
   int_SeriseNumber[i] = 7;
   break;
  case 56:
   int_SeriseNumber[i] = 8;
   break;
  case 57:
   int_SeriseNumber[i] = 9;
   break;
  }

 }
}

void main()
{
 char char_seriseNumber[1000];
 int int_seriseNumber[1000];

 long long sum_product = 1;
 long long max_product = 0;

 cout << " START Calc " << endl;
 
 ReadFile(char_seriseNumber);
 char_To_int(char_seriseNumber, int_seriseNumber);

 for (int outIdx = 0; outIdx < 1000; ++outIdx)
 {
  for (int innerIdx = outIdx; innerIdx <= outIdx + 12; ++innerIdx)
  {
   if (int_seriseNumber[innerIdx] == 0) break;
   if (int_seriseNumber[innerIdx] == 1) break;

   sum_product *= int_seriseNumber[innerIdx];
  }
  
  if (max_product < sum_product) max_product = sum_product;
  sum_product = 1;
 }
  
 cout << " Max of Product :" << max_product << endl;

 system("pause");
}

댓글 없음:

댓글 쓰기