鱼C论坛

 找回密码
 立即注册
楼主: 欧拉计划

题目8:找出这个1000位数字中连续13个数字乘积的最大值

[复制链接]
发表于 2017-2-21 22:29:22 | 显示全部楼层
python 好多 c好少
  1. /*找出一下1000位的整数中连续13个数字的最大乘积*/

  2. #include<stdio.h>

  3. typedef unsigned long long  ull;

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

  6. ull mul(char *ch)  //13个数的乘积
  7. {
  8.     int i = 13;
  9.     ull t = 1;
  10.     while(i--)
  11.     {
  12.         t = t *  (*(ch+i) - 48);
  13.     }
  14.     return t;
  15. }

  16. int main()
  17. {
  18.     ull max = 0;
  19.     int i = 0;
  20.     while(i <= 987)
  21.     {
  22.         max = max < mul(p) ? mul(p) : max;
  23.         p++;
  24.         i++;
  25.     }
  26.     printf("%llu", max);
  27.    return 0;
  28. }
复制代码

23514624000
Process returned 0 (0x0)   execution time : 0.030 s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-22 14:50:30 | 显示全部楼层
  1. date_0 = """73167176531330624919225119674426574742355349194934
  2. 96983520312774506326239578318016984801869478851843
  3. 85861560789112949495459501737958331952853208805511
  4. 12540698747158523863050715693290963295227443043557
  5. 66896648950445244523161731856403098711121722383113
  6. 62229893423380308135336276614282806444486645238749
  7. 30358907296290491560440772390713810515859307960866
  8. 70172427121883998797908792274921901699720888093776
  9. 65727333001053367881220235421809751254540594752243
  10. 52584907711670556013604839586446706324415722155397
  11. 53697817977846174064955149290862569321978468622482
  12. 83972241375657056057490261407972968652414535100474
  13. 82166370484403199890008895243450658541227588666881
  14. 16427171479924442928230863465674813919123162824586
  15. 17866458359124566529476545682848912883142607690042
  16. 24219022671055626321111109370544217506941658960408
  17. 07198403850962455444362981230987879927244284909188
  18. 84580156166097919133875499200524063689912560717606
  19. 05886116467109405077541002256983155200055935729725
  20. 71636269561882670428252483600823257530420752963450"""
  21. # 干掉有零的分片,把没有的做乘再比较

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

  26. def chengji(list):       # 给出分片做乘积
  27.     num = 1
  28.     for i in list:
  29.         num *= i
  30.     return  num

  31. def find_zero(list):       # 找零,无零回 True, 有零False
  32.     for j in list :
  33.         if j == 0 :
  34.             return False
  35.     return  True

  36. aw = 1
  37. for k in range(0, len(date)-13):
  38.     list_pian = []
  39.     for n in date[k: ( k + 13)] :       # 分片
  40.         list_pian.append(n)
  41.         if find_zero(list_pian) :  # 无零做积
  42.             m = chengji(list_pian)
  43.             if m > aw:
  44.                 aw = m
  45. print("答案是: " + str(aw))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-1 18:43:11 | 显示全部楼层
思路:
只要13个数字中有零就可以直接略过,, 根据这个,,, 我们用0把这个字符串分片
然后找出长度大于13的的列表,, 只要在这些列表里面找就好了

  1. #找出以下这个 1000 位的整数中连续 13 个数字的最大乘积。
  2. num='''
  3. 73167176531330624919225119674426574742355349194934
  4. 96983520312774506326239578318016984801869478851843
  5. 85861560789112949495459501737958331952853208805511
  6. 12540698747158523863050715693290963295227443043557
  7. 66896648950445244523161731856403098711121722383113
  8. 62229893423380308135336276614282806444486645238749
  9. 30358907296290491560440772390713810515859307960866
  10. 70172427121883998797908792274921901699720888093776
  11. 65727333001053367881220235421809751254540594752243
  12. 52584907711670556013604839586446706324415722155397
  13. 53697817977846174064955149290862569321978468622482
  14. 83972241375657056057490261407972968652414535100474
  15. 82166370484403199890008895243450658541227588666881
  16. 16427171479924442928230863465674813919123162824586
  17. 17866458359124566529476545682848912883142607690042
  18. 24219022671055626321111109370544217506941658960408
  19. 07198403850962455444362981230987879927244284909188
  20. 84580156166097919133875499200524063689912560717606
  21. 05886116467109405077541002256983155200055935729725
  22. 71636269561882670428252483600823257530420752963450'''

  23. numlen=13

  24. def prolist(list):
  25.         result=1
  26.         for i in list:
  27.                 result = result*int(i)
  28.         return result
  29. import time
  30. start=time.time()
  31. num=num.replace("\n","")
  32. numlist=(list(num))
  33. zerolist=num.split('0')
  34. maxpro=0
  35. for list in zerolist:
  36.         listlen=len(list)
  37.         if listlen<numlen:
  38.                 continue
  39.         else:
  40.                 for i in range(1,listlen-(numlen-2)):
  41.                         maxpro=max(maxpro,prolist(list[i:i+numlen]))
  42. print(maxpro)
  43. print("used:%.8fs" % (time.time()-start))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-2 11:54:31 | 显示全部楼层
1000个数字,禁止复制,我谢谢版主了,我的想法是先用0截断,分成多个字符串,小于13个的直接舍弃,留下了正好13的直接乘出结果,大于13的按顺序乘出结果,每次算的时候记录下对应的13个数,通过乘出来的结果对比,打印出最大的并找出对应的13位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-14 16:44:31 | 显示全部楼层
  1. str0='7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
  2. max1=0
  3. for i in range(0,1000-13):
  4.     str1 = str0[i:13+i]
  5.     mul =1
  6.     for j in range(0,13):
  7.         mul=mul*int(str1[j])
  8.     if max1<mul:
  9.         max1=mul
  10.         str2=str1[:]
  11.         num=i
  12. print(max1)
  13. print(list(str2))
复制代码

结果:>>>
23514624000
['5', '5', '7', '6', '6', '8', '9', '6', '6', '4', '8', '9', '5']
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-14 16:48:42 | 显示全部楼层
本帖最后由 99592938 于 2017-3-14 16:51 编辑
余欲渔 发表于 2017-3-2 11:54
1000个数字,禁止复制,我谢谢版主了,我的想法是先用0截断,分成多个字符串,小于13个的直接舍弃,留下了 ...


哈哈,浏览器有复制,不要用右键或快捷键。另外你的想法对大数据很好用,1000个数字不需用这样吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 15:35:15 | 显示全部楼层
23514624000

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

  3. int main(void)
  4. {
  5.     char nums[] = {"316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"};

  6.     int i = 0, j;
  7.     long result = 0, temp = 1;

  8.     for(i = 0; i < strlen(nums) - 13; i++)
  9.     {
  10.         if((nums[i + 12] - '0') == 0)
  11.         {
  12.             i += 13;
  13.         }
  14.         else
  15.         {
  16.             for(j = 0; j < 13; j++)
  17.             {
  18.                 temp *= nums[i + j] - '0';
  19.             }

  20.             if (temp > result)
  21.             {
  22.                 result = temp;
  23.             }

  24.             temp = 1;
  25.         }
  26.     }

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

  28.     return 0;
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 15:42:11 | 显示全部楼层
  1. def main():
  2.     nums = '''316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'''

  3.     result = 0
  4.     temp = 1

  5.     for i in range(len(nums) - 12):
  6.         if int(nums[i + 12]) == 0:
  7.             i += 13
  8.         else:
  9.             for j in range(13):
  10.                 temp *= int(nums[i + j])

  11.             if temp > result:
  12.                 result = temp

  13.             temp = 1

  14.     print(result)

  15. if __name__ == "__main__":
  16.     main()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-30 17:43:23 | 显示全部楼层
  1. #-*- coding:utf-8 -*-
  2. def StrToList(mystr,length):
  3.     listTmp = []
  4.     for i in range(0,len(mystr) - length +1):
  5.         listTmp.append(int(mystr[i:i + length]))
  6.         print(listTmp)
  7.     return listTmp
  8. #数组
  9. mystr = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'
  10. lastList = []  
  11. #将数组拆分成13位的列
  12. mylist = StrToList(mystr,13)

  13. lastList = []

  14. for each in mylist:
  15.     p = 1
  16.     for i in (str(each)):
  17.         p *= int(i)
  18.     lastList.append(p)

  19. print(max(lastList))
复制代码


结果是23514624000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-5 23:30:32 | 显示全部楼层
结果:70573265280
代码个人觉得还算比较简洁的,如下:
  1. from functools import reduce

  2. num = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450

  3. a = []

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

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

  11. print(sorted(a), sorted(a)[-1])  //排序并打印出最大的数
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 19:46:35 | 显示全部楼层
Python,感觉不够简练
#找出下列1000位的整数中连续13个数字的最大乘积

  1. number = '''73167176531330624919225119674426574742355349194934
  2. 96983520312774506326239578318016984801869478851843
  3. 85861560789112949495459501737958331952853208805511
  4. 12540698747158523863050715693290963295227443043557
  5. 66896648950445244523161731856403098711121722383113
  6. 62229893423380308135336276614282806444486645238749
  7. 30358907296290491560440772390713810515859307960866
  8. 70172427121883998797908792274921901699720888093776
  9. 65727333001053367881220235421809751254540594752243
  10. 52584907711670556013604839586446706324415722155397
  11. 53697817977846174064955149290862569321978468622482
  12. 83972241375657056057490261407972968652414535100474
  13. 82166370484403199890008895243450658541227588666881
  14. 16427171479924442928230863465674813919123162824586
  15. 17866458359124566529476545682848912883142607690042
  16. 24219022671055626321111109370544217506941658960408
  17. 07198403850962455444362981230987879927244284909188
  18. 84580156166097919133875499200524063689912560717606
  19. 05886116467109405077541002256983155200055935729725
  20. 71636269561882670428252483600823257530420752963450'''

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

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

  28. def max13(numberlist):
  29.     maxium = dict()
  30.     for eachs in numberlist:
  31.         for i in range(len(eachs)-12):
  32.             x = eachs[i:i+13]
  33.             maxium.setdefault(x,1)
  34.             product = 1
  35.             for each in x:
  36.                 product *= int(each)
  37.             if product > maxium[x]:
  38.                 maxium[x] = product
  39.     ss = ''
  40.     mm = 1
  41.     for eachs in maxium:
  42.         if maxium[eachs] > mm:
  43.             ss = eachs
  44.             mm = maxium[eachs]

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


  46. max13(number13)
复制代码


结果:该1000位的整数连续13个数字的最大乘积为:23514624000;这13个数为:5576689664895
时间:0.00500178337097168s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-30 23:00:06 | 显示全部楼层
本帖最后由 天之南 于 2017-4-30 23:03 编辑
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         char str[] = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
  5.         int l = strlen(str);
  6.         long long max = 0;
  7.         int start = 0;
  8.         for (int i = 0;i + 13 < l;i++)
  9.         {
  10.                 long long x = 1;
  11.                 for (int j = 0;j < 13;j++)
  12.                 {
  13.                         x*=(str[i + j]-48);
  14.                 }
  15.                 if (max < x)
  16.                 {
  17.                         max = x;
  18.                         start = i;
  19.                 }
  20.         }
  21.         printf("%d", str[start] - 48);
  22.         for (int j = start + 1;j < start+13;j++)
  23.         {
  24.                 printf("×%d", str[j]-48);
  25.         }
  26.         printf("=%lld\n", max);
  27.        
  28.         return 0;
  29. }
复制代码


5×5×7×6×6×8×9×6×6×4×8×9×5=23514624000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-4 18:09:56 | 显示全部楼层
答案是23514624000
我这个可以自定义找到数字的间距
  1. #include<stdio.h>

  2. //节省运算关键在于找0,找到0则两侧12个都不用计算了。
  3. int main(void)
  4. {       
  5.         int i,gap,num[1000],pt;//point作为在数组里面走的探针
  6.         int rst=1,tmp=1;
  7.         char str[]="73167176531330624919225119674426574742355349194934\
  8. 96983520312774506326239578318016984801869478851843\
  9. 85861560789112949495459501737958331952853208805511\
  10. 12540698747158523863050715693290963295227443043557\
  11. 66896648950445244523161731856403098711121722383113\
  12. 62229893423380308135336276614282806444486645238749\
  13. 30358907296290491560440772390713810515859307960866\
  14. 70172427121883998797908792274921901699720888093776\
  15. 65727333001053367881220235421809751254540594752243\
  16. 52584907711670556013604839586446706324415722155397\
  17. 53697817977846174064955149290862569321978468622482\
  18. 83972241375657056057490261407972968652414535100474\
  19. 82166370484403199890008895243450658541227588666881\
  20. 16427171479924442928230863465674813919123162824586\
  21. 17866458359124566529476545682848912883142607690042\
  22. 24219022671055626321111109370544217506941658960408\
  23. 07198403850962455444362981230987879927244284909188\
  24. 84580156166097919133875499200524063689912560717606\
  25. 05886116467109405077541002256983155200055935729725\
  26. 71636269561882670428252483600823257530420752963450";

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

  32. while(pt<1000)
  33.         {

  34. relocate:
  35.                 tmp=1;
  36.                 for(i=pt-gap;i<pt;++i)        tmp=tmp*num[i];
  37.                 if(tmp==0)
  38.                 {
  39.                         pt++;
  40.                         goto relocate;        //为0表示跳过的位置里面有0
  41.                 }
  42.        
  43.                 if(tmp>rst)        rst=tmp;
  44.                 while(num[pt])
  45.                 {
  46.                         tmp /= num[pt-gap];
  47.                         tmp *= num[pt];
  48.                         if(tmp>rst)        rst=tmp;
  49.                         pt++;
  50.                 }
  51.                 pt += (gap+1);
  52.         }
  53.        
  54.         printf("%d\n",rst);
  55.         return 0;
  56. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-7 17:18:57 | 显示全部楼层
  1. public static void main(String[] args) {
  2.                 String str = "7316717653133062491922511" +
  3.                                 "9674426574742355349194934969835" +
  4.                                 "20312774506326239578318016984801869" +
  5.                                 "478851843858615607891129494954595017" +
  6.                                 "379583319528532088055111254069874715852" +
  7.                                 "3863050715693290963295227443043557668966" +
  8.                                 "48950445244523161731856403098711121722" +
  9.                                 "38311362229893423380308135336276614282" +
  10.                                 "80644448664523874930358907296290491560" +
  11.                                 "4407723907138105158593079608667017242" +
  12.                                 "7121883998797908792274921901699720888" +
  13.                                 "0937766572733300105336788122023542180" +
  14.                                 "9751254540594752243525849077116705560" +
  15.                                 "1360483958644670632441572215539753697" +
  16.                                 "8179778461740649551492908625693219784" +
  17.                                 "686224828397224137565705605749026140797" +
  18.                                 "296865241453510047482166370484403199890008895243450" +
  19.                                 "65854122758866688116427171479924442928230863465674813" +
  20.                                 "9191231628245861786645835912456652947654568284891288314" +
  21.                                 "26076900422421902267105562632111110937054421750694165896" +
  22.                                 "04080719840385096245544436298123098787992724428490918884" +
  23.                                 "580156166097919133875499200524063689912560717606058861164" +
  24.                                 "671094050775410022569831552000559357297257163626956188267" +
  25.                                 "0428252483600823257530420752963450";
  26.                 String ss[]=str.split("0");
  27.                 List<String> zz=new ArrayList<String>();
  28.                 for(String ssz:ss){
  29.                         if(ssz.length()>13){
  30.                                 zz.add(ssz);
  31.                         }
  32.                 }
  33.                 List<int[]> arr=new ArrayList<int[]>();
  34.                 for(int j=0;j<zz.size();j++){
  35.                         String num=zz.get(j);
  36.                         int sums[]=new int[num.length()];
  37.                         int sum=1;
  38.                         for(int i=0;i<num.length();i++){
  39.                                 sums[i]=Integer.parseInt(new String(new char[]{num.charAt(i)}));
  40.                         }
  41.                         arr.add(sums);
  42.                 }
  43.                 long max=0;
  44.                 int number[]=new int[13];
  45.                 for (int[] is : arr) {
  46.                         for (int i=0;i<is.length-12;i++) {
  47.                                 long sum=1;
  48.                                 for (int j = i; j <i+13; j++) {
  49.                                         sum*=is[j];
  50.                                 }
  51.                                 if(sum>max){
  52.                                         max=sum;
  53.                                         int x=0;
  54.                                         for (int j = i; j <i+13; j++) {
  55.                                                 number[x]=is[j];
  56.                                                 x++;
  57.                                         }
  58.                                 }
  59.                         }
  60.                 }
  61.                 System.out.println(max);
  62.                 for (int i : number) {
  63.                         System.out.println(i);
  64.                 }
  65.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-23 19:41:14 | 显示全部楼层
为什么我的是3780710640
  1. #include <stdio.h>
  2. #include <string.h>

  3. //euler 8

  4. int main(void){
  5.        
  6.         int i, j;
  7.        
  8.         unsigned long int max = 0;
  9.         unsigned long n = 1;
  10.        
  11.         char str[] = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450";
  12.        
  13.         int len = strlen(str);
  14.        
  15.         for (i = 0; i < len - 13; i++){
  16.                 for (j = 0; j < 13; j++){
  17.                         n *= str[i+j] - '0';
  18.                 }
  19.                 if (n > max){
  20.                         max = n;
  21.                 }
  22.                 n = 1;
  23.         }
  24.        
  25.         printf("%lld", max);
  26.         return 0;
  27. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-12 14:26:15 | 显示全部楼层

  1. target = '''73167176531330624919225119674426574742355349194934
  2. 96983520312774506326239578318016984801869478851843
  3. 85861560789112949495459501737958331952853208805511
  4. 12540698747158523863050715693290963295227443043557
  5. 66896648950445244523161731856403098711121722383113
  6. 62229893423380308135336276614282806444486645238749
  7. 30358907296290491560440772390713810515859307960866
  8. 70172427121883998797908792274921901699720888093776
  9. 65727333001053367881220235421809751254540594752243
  10. 52584907711670556013604839586446706324415722155397
  11. 53697817977846174064955149290862569321978468622482
  12. 83972241375657056057490261407972968652414535100474
  13. 82166370484403199890008895243450658541227588666881
  14. 16427171479924442928230863465674813919123162824586
  15. 17866458359124566529476545682848912883142607690042
  16. 24219022671055626321111109370544217506941658960408
  17. 07198403850962455444362981230987879927244284909188
  18. 84580156166097919133875499200524063689912560717606
  19. 05886116467109405077541002256983155200055935729725
  20. 71636269561882670428252483600823257530420752963450'''


  21. s = target.replace('\n','')
  22. total = 0
  23. for i in range(987):
  24.     mutiple = 1
  25.     for j in range(13):
  26.         mutiple *= int(s[i+j])
  27.         if not mutiple:
  28.             break
  29.     total = max(mutiple,total)

  30. print(total)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-30 11:31:18 | 显示全部楼层
AArdio编写:
  1. import console;
  2. import time.timer

  3. console.setTitle("Test");

  4. time.timer.start();

  5. var s = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"

  6. function tolist(s) begin
  7.     var tab = {}
  8.     for i=1;#s begin
  9.         table.push(tab,string.sub(s,i,i));
  10.    
  11.     end;
  12.     return tab

  13. end;

  14. var list = tolist(s);
  15. var max = 0;
  16. for i=1;#list-12 begin
  17.     var tmp = 1
  18.     for j=0;12 begin
  19.         tmp *= tonumber(list[i+j])
  20.    
  21.     end;
  22.     max = math.max(max,tmp)

  23. end;

  24. console.print(max);

  25. console.print(time.timer.endTick(), '毫秒');
复制代码


23514624000
3.714270055294  毫秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-19 22:30:37 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define NUM 1001
  4. int compare(int m[],int max[],int digit,int now)
  5. {
  6.         int i=now;
  7.         if(digit>now)
  8.         {
  9.                 return 1;
  10.         }
  11.         else if(digit==now)
  12.         {
  13.                 for(;i>=0;i--)
  14.                 {
  15.                         if(m[i]>max[i])
  16.                         {
  17.                                 return 1;
  18.                         }
  19.                 }
  20.                 return 0;
  21.         }
  22.         else
  23.                 return 0;
  24. }
  25. int main(void)
  26. {
  27.         FILE *fp;
  28.         char num[NUM];
  29.         int  n[NUM],t[13],m[20],max[20]={0};
  30.         int i,j,temp,k=0,start,carry,digit=1,now=7;
  31.         if(!(fp=fopen("1.txt","r")))
  32.         {
  33.                 printf("读写错误!");
  34.                 exit(1);
  35.         }
  36.         fgets(num,NUM,fp);
  37.         for(i=0;i<NUM-1;i++)
  38.         {
  39.                 n[i]=num[i]-'0';
  40.                 printf("%d",n[i]);
  41.         }
  42.         printf("\n");

  43.         for(i=0;i<NUM-13;i++)
  44.         {
  45.                 m[0]=1;
  46.                 digit=1;
  47.                 for(k=1;k<20;k++)
  48.                 {
  49.                         m[k]=0;
  50.                 }

  51.                 for(j=i;j<i+13;j++)
  52.                 {
  53.                         for(k=1,carry=0;k<=digit;k++)
  54.                         {
  55.                                 temp=m[k-1]*n[j]+carry;
  56.                                 m[k-1]=temp%10;
  57.                                 carry=temp/10;
  58.                         }
  59.                         while(carry)
  60.                         {
  61.                                         m[++digit-1]=carry%10;
  62.                                         carry=carry/10;
  63.                         }
  64.                 }

  65.                 if(compare(m,max,digit,now))
  66.                 {
  67.                         now=digit;
  68.                         for(k=0;k<20;k++)
  69.                         {
  70.                                 max[k]=m[k];       
  71.                         }
  72.                         k=0;
  73.                         start=i;
  74.                         for(j=i;j<i+13;j++)
  75.                         {
  76.                                 t[k]=n[j];
  77.                                 k++;
  78.                         }
  79.                 }

  80.         }

  81.         printf("\n从第%d开始\n",start);
  82.         for(k=now-1;k>=0;k--)
  83.         {
  84.                 printf("%d",max[k]);
  85.         }
  86.         printf("\n");
  87.         for(k=0;k<13;k++)
  88.         {
  89.                 printf("%d  ",t[k]);
  90.         }
  91.         printf("\n");
  92.         fclose(fp);
  93.         system("pause");
  94.     return 0;
  95. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-27 15:17:52 | 显示全部楼层
  1. import time


  2. series = '''
  3. 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450'''


  4. def product(str1):
  5.     result = 1
  6.     if '0' in str1:
  7.         return 0
  8.     else:
  9.         for i in str1:
  10.             result *= int(i)
  11.         return result


  12. start = time.time()
  13. maxresult = product(series[1:14])
  14. for i in range(2, len(series) - 13):
  15.     str1 = series[i:i+13]
  16.     maxresult = max(maxresult, product(str1))
  17. print maxresult
  18. print time.time() - start
复制代码


还有可优化的点是,如果新加入的数比之前剔除的数小,那么新的这组数的乘积就不用算了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

匿名鱼油  发表于 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 01:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表