0mrli0 发表于 2017-2-21 22:29:22

python 好多 c好少
/*找出一下1000位的整数中连续13个数字的最大乘积*/

#include<stdio.h>

typedef unsigned long longull;

char a[]={"7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};
char *p = a;

ull mul(char *ch)//13个数的乘积
{
    int i = 13;
    ull t = 1;
    while(i--)
    {
      t = t *(*(ch+i) - 48);
    }
    return t;
}

int main()
{
    ull max = 0;
    int i = 0;
    while(i <= 987)
    {
      max = max < mul(p) ? mul(p) : max;
      p++;
      i++;
    }
    printf("%llu", max);
   return 0;
}
23514624000
Process returned 0 (0x0)   execution time : 0.030 s

marmot 发表于 2017-2-22 14:50:30

date_0 = """73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450"""
# 干掉有零的分片,把没有的做乘再比较

date = []
for a in date_0.split():   #去回车,重整数据为 整数 然放入一个列表date
    for b in a :
      date.append(int(b))

def chengji(list):       # 给出分片做乘积
    num = 1
    for i in list:
      num *= i
    returnnum

def find_zero(list):       # 找零,无零回 True, 有零False
    for j in list :
      if j == 0 :
            return False
    returnTrue

aw = 1
for k in range(0, len(date)-13):
    list_pian = []
    for n in date :       # 分片
      list_pian.append(n)
      if find_zero(list_pian) :# 无零做积
            m = chengji(list_pian)
            if m > aw:
                aw = m
print("答案是: " + str(aw))

NiceB 发表于 2017-3-1 18:43:11

思路:
只要13个数字中有零就可以直接略过,, 根据这个,,, 我们用0把这个字符串分片
然后找出长度大于13的的列表,, 只要在这些列表里面找就好了

#找出以下这个 1000 位的整数中连续 13 个数字的最大乘积。
num='''
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''

numlen=13

def prolist(list):
        result=1
        for i in list:
                result = result*int(i)
        return result
import time
start=time.time()
num=num.replace("\n","")
numlist=(list(num))
zerolist=num.split('0')
maxpro=0
for list in zerolist:
        listlen=len(list)
        if listlen<numlen:
                continue
        else:
                for i in range(1,listlen-(numlen-2)):
                        maxpro=max(maxpro,prolist(list))
print(maxpro)
print("used:%.8fs" % (time.time()-start))

余欲渔 发表于 2017-3-2 11:54:31

1000个数字,禁止复制,我谢谢版主了,我的想法是先用0截断,分成多个字符串,小于13个的直接舍弃,留下了正好13的直接乘出结果,大于13的按顺序乘出结果,每次算的时候记录下对应的13个数,通过乘出来的结果对比,打印出最大的并找出对应的13位数

99592938 发表于 2017-3-14 16:44:31

str0='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
max1=0
for i in range(0,1000-13):
    str1 = str0
    mul =1
    for j in range(0,13):
      mul=mul*int(str1)
    if max1<mul:
      max1=mul
      str2=str1[:]
      num=i
print(max1)
print(list(str2))
结果:>>>
23514624000
['5', '5', '7', '6', '6', '8', '9', '6', '6', '4', '8', '9', '5']

99592938 发表于 2017-3-14 16:48:42

本帖最后由 99592938 于 2017-3-14 16:51 编辑

余欲渔 发表于 2017-3-2 11:54
1000个数字,禁止复制,我谢谢版主了,我的想法是先用0截断,分成多个字符串,小于13个的直接舍弃,留下了 ...

哈哈,浏览器有复制,不要用右键或快捷键。另外你的想法对大数据很好用,1000个数字不需用这样吧?

JonTargaryen 发表于 2017-3-28 15:35:15

23514624000

#include <stdio.h>
#include <string.h>

int main(void)
{
    char nums[] = {"316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};

    int i = 0, j;
    long result = 0, temp = 1;

    for(i = 0; i < strlen(nums) - 13; i++)
    {
      if((nums - '0') == 0)
      {
            i += 13;
      }
      else
      {
            for(j = 0; j < 13; j++)
            {
                temp *= nums - '0';
            }

            if (temp > result)
            {
                result = temp;
            }

            temp = 1;
      }
    }

    printf("%ld\n", result);

    return 0;
}

JonTargaryen 发表于 2017-3-28 15:42:11

JonTargaryen 发表于 2017-3-28 15:35
23514624000

def main():
    nums = '''316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'''

    result = 0
    temp = 1

    for i in range(len(nums) - 12):
      if int(nums) == 0:
            i += 13
      else:
            for j in range(13):
                temp *= int(nums)

            if temp > result:
                result = temp

            temp = 1

    print(result)

if __name__ == "__main__":
    main()

zhu244912654 发表于 2017-3-30 17:43:23

#-*- coding:utf-8 -*-
def StrToList(mystr,length):
    listTmp = []
    for i in range(0,len(mystr) - length +1):
      listTmp.append(int(mystr))
      print(listTmp)
    return listTmp
#数组
mystr = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
lastList = []
#将数组拆分成13位的列
mylist = StrToList(mystr,13)

lastList = []

for each in mylist:
    p = 1
    for i in (str(each)):
      p *= int(i)
    lastList.append(p)

print(max(lastList))


结果是23514624000

凌晨分子 发表于 2017-4-5 23:30:32

结果:70573265280
代码个人觉得还算比较简洁的,如下:
from functools import reduce

num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

a = []

def calc(li)://遍历连续的13位,计算其乘积并放入a列表中
n=0
while n+13 <= len(li):
    a.append(reduce(lambda x,y: int(x)*int(y), li))
    n += 1

for i in list(filter(lambda a: len(a)>=13, str(num).split('0'))): //将大数转成字符串并用0和有连续13个非0数来分割
calc(i)

print(sorted(a), sorted(a)[-1])//排序并打印出最大的数

Eagle.Tong 发表于 2017-4-23 19:46:35

Python,感觉不够简练
#找出下列1000位的整数中连续13个数字的最大乘积

number = '''73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''

number = number.strip()
number = number.replace('\n','')

number = number.split('0')
number13 = []
for each in number:
    if len(each) >= 13:
      number13.append(each)

def max13(numberlist):
    maxium = dict()
    for eachs in numberlist:
      for i in range(len(eachs)-12):
            x = eachs
            maxium.setdefault(x,1)
            product = 1
            for each in x:
                product *= int(each)
            if product > maxium:
                maxium = product
    ss = ''
    mm = 1
    for eachs in maxium:
      if maxium > mm:
            ss = eachs
            mm = maxium

    print('该1000位的整数连续13个数字的最大乘积为:%d;这13个数为:%s'%(mm,ss))


max13(number13)

结果:该1000位的整数连续13个数字的最大乘积为:23514624000;这13个数为:5576689664895
时间:0.00500178337097168s

天之南 发表于 2017-4-30 23:00:06

本帖最后由 天之南 于 2017-4-30 23:03 编辑

#include<stdio.h>

int main()
{
        char str[] = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
        int l = strlen(str);
        long long max = 0;
        int start = 0;
        for (int i = 0;i + 13 < l;i++)
        {
                long long x = 1;
                for (int j = 0;j < 13;j++)
                {
                        x*=(str-48);
                }
                if (max < x)
                {
                        max = x;
                        start = i;
                }
        }
        printf("%d", str - 48);
        for (int j = start + 1;j < start+13;j++)
        {
                printf("×%d", str-48);
        }
        printf("=%lld\n", max);
       
        return 0;
}


5×5×7×6×6×8×9×6×6×4×8×9×5=23514624000

铭记太阳 发表于 2017-5-4 18:09:56

答案是23514624000
我这个可以自定义找到数字的间距
#include<stdio.h>

//节省运算关键在于找0,找到0则两侧12个都不用计算了。
int main(void)
{       
        int i,gap,num,pt;//point作为在数组里面走的探针
        int rst=1,tmp=1;
        char str[]="73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450";

        for(i=0;i<1000;++i)
                num=(int)str-48;
        printf("data loading success!\nenter thr gap:\t");
        scanf("%d",&gap);
        pt = gap;

while(pt<1000)
        {

relocate:
                tmp=1;
                for(i=pt-gap;i<pt;++i)        tmp=tmp*num;
                if(tmp==0)
                {
                        pt++;
                        goto relocate;        //为0表示跳过的位置里面有0
                }
       
                if(tmp>rst)        rst=tmp;
                while(num)
                {
                        tmp /= num;
                        tmp *= num;
                        if(tmp>rst)        rst=tmp;
                        pt++;
                }
                pt += (gap+1);
        }
       
        printf("%d\n",rst);
        return 0;
}

格式化、 发表于 2017-6-7 17:18:57

public static void main(String[] args) {
                String str = "7316717653133062491922511" +
                                "9674426574742355349194934969835" +
                                "20312774506326239578318016984801869" +
                                "478851843858615607891129494954595017" +
                                "379583319528532088055111254069874715852" +
                                "3863050715693290963295227443043557668966" +
                                "48950445244523161731856403098711121722" +
                                "38311362229893423380308135336276614282" +
                                "80644448664523874930358907296290491560" +
                                "4407723907138105158593079608667017242" +
                                "7121883998797908792274921901699720888" +
                                "0937766572733300105336788122023542180" +
                                "9751254540594752243525849077116705560" +
                                "1360483958644670632441572215539753697" +
                                "8179778461740649551492908625693219784" +
                                "686224828397224137565705605749026140797" +
                                "296865241453510047482166370484403199890008895243450" +
                                "65854122758866688116427171479924442928230863465674813" +
                                "9191231628245861786645835912456652947654568284891288314" +
                                "26076900422421902267105562632111110937054421750694165896" +
                                "04080719840385096245544436298123098787992724428490918884" +
                                "580156166097919133875499200524063689912560717606058861164" +
                                "671094050775410022569831552000559357297257163626956188267" +
                                "0428252483600823257530420752963450";
                String ss[]=str.split("0");
                List<String> zz=new ArrayList<String>();
                for(String ssz:ss){
                        if(ssz.length()>13){
                                zz.add(ssz);
                        }
                }
                List<int[]> arr=new ArrayList<int[]>();
                for(int j=0;j<zz.size();j++){
                        String num=zz.get(j);
                        int sums[]=new int;
                        int sum=1;
                        for(int i=0;i<num.length();i++){
                                sums=Integer.parseInt(new String(new char[]{num.charAt(i)}));
                        }
                        arr.add(sums);
                }
                long max=0;
                int number[]=new int;
                for (int[] is : arr) {
                        for (int i=0;i<is.length-12;i++) {
                                long sum=1;
                                for (int j = i; j <i+13; j++) {
                                        sum*=is;
                                }
                                if(sum>max){
                                        max=sum;
                                        int x=0;
                                        for (int j = i; j <i+13; j++) {
                                                number=is;
                                                x++;
                                        }
                                }
                        }
                }
                System.out.println(max);
                for (int i : number) {
                        System.out.println(i);
                }
        }

水冢 发表于 2017-8-23 19:41:14

为什么我的是3780710640#include <stdio.h>
#include <string.h>

//euler 8

int main(void){
       
        int i, j;
       
        unsigned long int max = 0;
        unsigned long n = 1;
       
        char str[] = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
       
        int len = strlen(str);
       
        for (i = 0; i < len - 13; i++){
                for (j = 0; j < 13; j++){
                        n *= str - '0';
                }
                if (n > max){
                        max = n;
                }
                n = 1;
        }
       
        printf("%lld", max);
        return 0;
}

BngThea 发表于 2017-9-12 14:26:15


target = '''73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''


s = target.replace('\n','')
total = 0
for i in range(987):
    mutiple = 1
    for j in range(13):
      mutiple *= int(s)
      if not mutiple:
            break
    total = max(mutiple,total)

print(total)

jerryxjr1220 发表于 2017-9-30 11:31:18

AArdio编写:
import console;
import time.timer

console.setTitle("Test");

time.timer.start();

var s = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

function tolist(s) begin
    var tab = {}
    for i=1;#s begin
      table.push(tab,string.sub(s,i,i));
   
    end;
    return tab

end;

var list = tolist(s);
var max = 0;
for i=1;#list-12 begin
    var tmp = 1
    for j=0;12 begin
      tmp *= tonumber(list)
   
    end;
    max = math.max(max,tmp)

end;

console.print(max);

console.print(time.timer.endTick(), '毫秒');

23514624000
3.714270055294毫秒

由我们主宰 发表于 2018-3-19 22:30:37

#include<stdio.h>
#include<stdlib.h>
#define NUM 1001
int compare(int m[],int max[],int digit,int now)
{
        int i=now;
        if(digit>now)
        {
                return 1;
        }
        else if(digit==now)
        {
                for(;i>=0;i--)
                {
                        if(m>max)
                        {
                                return 1;
                        }
                }
                return 0;
        }
        else
                return 0;
}
int main(void)
{
        FILE *fp;
        char num;
        intn,t,m,max={0};
        int i,j,temp,k=0,start,carry,digit=1,now=7;
        if(!(fp=fopen("1.txt","r")))
        {
                printf("读写错误!");
                exit(1);
        }
        fgets(num,NUM,fp);
        for(i=0;i<NUM-1;i++)
        {
                n=num-'0';
                printf("%d",n);
        }
        printf("\n");

        for(i=0;i<NUM-13;i++)
        {
                m=1;
                digit=1;
                for(k=1;k<20;k++)
                {
                        m=0;
                }

                for(j=i;j<i+13;j++)
                {
                        for(k=1,carry=0;k<=digit;k++)
                        {
                                temp=m*n+carry;
                                m=temp%10;
                                carry=temp/10;
                        }
                        while(carry)
                        {
                                        m[++digit-1]=carry%10;
                                        carry=carry/10;
                        }
                }

                if(compare(m,max,digit,now))
                {
                        now=digit;
                        for(k=0;k<20;k++)
                        {
                                max=m;       
                        }
                        k=0;
                        start=i;
                        for(j=i;j<i+13;j++)
                        {
                                t=n;
                                k++;
                        }
                }

        }

        printf("\n从第%d开始\n",start);
        for(k=now-1;k>=0;k--)
        {
                printf("%d",max);
        }
        printf("\n");
        for(k=0;k<13;k++)
        {
                printf("%d",t);
        }
        printf("\n");
        fclose(fp);
        system("pause");
    return 0;
}

阿bang 发表于 2018-3-27 15:17:52

import time


series = '''
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'''


def product(str1):
    result = 1
    if '0' in str1:
      return 0
    else:
      for i in str1:
            result *= int(i)
      return result


start = time.time()
maxresult = product(series)
for i in range(2, len(series) - 13):
    str1 = series
    maxresult = max(maxresult, product(str1))
print maxresult
print time.time() - start

还有可优化的点是,如果新加入的数比之前剔除的数小,那么新的这组数的乘积就不用算了。

发表于 2018-3-27 16:23:54

<url>http://canadianpharmaciesrxbest.com/|pharmacy online</url>, <url>http://canadianonlinepharmacygen.com/|canadian drugstore online</url>, <url>http://canadianpharmaciesdiscount.com/|discount pharmacy</url>, <url>http://canadianpharmacieslink.com/|ed meds online</url>
页: 1 [2] 3 4
查看完整版本: 题目8:找出这个1000位数字中连续13个数字乘积的最大值