如何在python中的列表中找到模数为每个整数的乘积

时间:2016-10-27 07:41:25

标签: python list int size product

我试图在列表中找到每个元素的产品。假设包含1000个元素,每个元素的值大于200,并且每次元素与其他元素相乘时采用mod(%1000000007)。给定的代码可以正常使用较小的值,但对于较大的输入,我得到运行时错误 - NZEC

WIN32_FIND_DATAA ffd;
string s = "E:\\OpenCV\\SABT\\Old";

HANDLE hFind = FindFirstFileA(s.c_str(), &ffd);

if (INVALID_HANDLE_VALUE == hFind)
{
   printf("no file found");
   return -1;
}

do
{
   if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
   {
     std::string fn = path + ffd.cFileName;
     printf("file %s\n", fn.c_str());
   }
} while (FindNextFileA(hFind, &ffd) != 0);

INPUT的格式为:

5

1 2 3 4 5

2 个答案:

答案 0 :(得分:2)

问题在于数字的处理方式,而不是您使用的操作。

我的意思是当你输入时:

89 100 200 678 123  #EDIT- CHANGED FOR NO COMMAS

创建的变量就是这样的字符串:

s = "89 100 200 678 123"

在python中,当你尝试迭代这样的字符串时:

s[i]

字符串被读取为如下列表:

s = ['8','9',' ','1','0','0',' ','2','0','0',' ','6','7','8',' ','1','2','3']

所以这一部分:

for i in range(0,2*t,2): #t=5
    k=int(s[i])

获得以下元素:

k='8'
k=' '
k='0'
k=' '
k='0' 

这可能是您收到错误的原因。

我的解决方案是将输入作为列表,使用:

numbers = input().split(" ")

然后用正常情况得到:

for i in range(t):
    k=int(numbers[i])
    mul=(mul*k)%1000000007
print(mul)

编辑:

我添加了适用于我的代码,请告诉我它是否适合您:

mul=1
t = int(input()) #5
numbers = input().split(' ') #11 2 15 3 99
for i in range(t):
    k=int(numbers[i])
    mul=(mul*k)%1000000007
print(mul) #98010

答案 1 :(得分:0)

我认为非零返回(NZEC)存在是因为您尝试在单个变量中采用由空格分隔的多个输入。因此,要在数组列表中获取多个输入,您需要将代码更改为此类代码。

integers_list = [int(i) for i in input().split(' ')]
integers_list

output:-[22, 33, 11]

所以,现在我们列表中的数据存储完好,现在您可以按照自己的意愿操作它们。

对于列表元素的乘法,你可以在这里查看: - https://fiddle.sencha.com/#fiddle/1jd2