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 }

 

posted @ 2014-05-30 21:24  soul390  阅读(234)  评论(0编辑  收藏  举报