Project Euler 8 Largest product in a series


题意:寻找这 1000 个数中相邻 13 个数相乘积最大的值

思路:首先想到的是暴力,但是还可以利用之前记录过的数值,什么意思呢?即在计算 2 ~ 14 后,再计算 3 ~ 15 时完全可以利用之前计算 2~14的值再除以 2 乘上 15 ,但是因为其中有 0 的存在需要改造一下,记录下之前出现的 0 的个数,当这连续13个数有 0 存在的时候,结果自然是 0 直接忽略,当没 0 的时候更新一下 maxN 即可。


/*************************************************************************
    > File Name: euler008.c
    > Author:    WArobot 
    > Blog:      http://www.cnblogs.com/WArobot/ 
    > Created Time: 2017年06月23日 星期五 22时41分02秒
 ************************************************************************/

#include "inputdata.h"

int32_t main(){
	int64_t ans = 1 , zero = 0 , maxN = 0;
	for(int32_t i = 0 ; i < 1000 ; i++){
		if( ch[i] != '0' ){
			ans *= ch[i] - '0';
		}else{
			++zero;
		}
		if( i >= 13 ){
			if( ch[i-13] != '0' ){
				ans /= ch[i-13] - '0';
			}else{
				--zero;
			}
		}
		if( zero == 0 && ans > maxN )	maxN = ans;
	}
	printf("%"PRId64"\n",maxN);
	return 0;
}
posted @ 2017-06-24 19:36  ojnQ  阅读(197)  评论(0编辑  收藏  举报