ProjectEuler 008题
题目:
The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 = 5832.
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
代码:将这个矩阵完全复制到一个txt文件中,进行读取计算
1 #include<iostream> 2 //#include<stdio.h> 3 using namespace std; 4 5 int main() { 6 FILE* pFile = fopen("digits.txt","r"); 7 if(pFile == NULL){ 8 cout << "打开文件失败!" << endl; 9 return 0; 10 } 11 //unsigned int res = 1; 12 long long res = 1; 13 while(!feof(pFile)) { 14 15 char cnums[14]; 16 bool end = false; 17 bool has_n = false; 18 for(int i = 0; i < 14; i++) { 19 if(feof(pFile)){ 20 end = true; 21 break; 22 } 23 if(i == 13 && has_n == false){ 24 break; 25 } 26 char c = fgetc(pFile); 27 if(c == '\n'){ 28 has_n = true; 29 } 30 cnums[i] = c; 31 } 32 if(end) 33 break; 34 //要考虑是否有'/n'和'0' 35 //unsigned int m = 1; 36 long long m = 1; 37 bool haszero = false; 38 int j=0;//可能要用来表示0的位置 39 int k = 13; 40 if(has_n){ 41 k = 14; 42 } 43 for(j = 0; j<k;j++) { 44 if(cnums[j] != '0' && cnums[j] != '\n') { 45 m = m*(cnums[j]-'0'); 46 } 47 else if (cnums[j] == '0'){ 48 haszero = true; 49 break;//13个数字中含有0 50 } 51 } 52 if(haszero == false) {//13个数字中不含0,比较结果,并返回指针 53 if(m > res){ 54 res = m; 55 } 56 fseek(pFile, -(k-1), SEEK_CUR ); 57 //cout << fgetc(pFile); 58 } else {//13个数字中含有0,将指针返回到0之后 59 fseek(pFile, -k, SEEK_CUR ); 60 fseek(pFile, j+1, SEEK_CUR ); 61 //cout << fgetc(pFile); 62 } 63 cout << res << endl; 64 } 65 cout << res; 66 if(fclose(pFile) == EOF) { 67 cout << "关闭文件失败." << endl; 68 } 69 system("pause"); 70 return 0; 71 }