我试图在列表中找到每个元素的产品。假设包含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
答案 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