【发布时间】:2018-06-29 09:06:33
【问题描述】:
我必须打印数组 A mod 10^9+7 的元素的乘积,数组中应该有 N 元素,并且约束是 1<=N<=10^3 和 1<=A[i]<=10^3。
我写的代码
#include<stdio.h>
int main()
{
int N, pro = 1;
scanf("%i", &N);
int arr[N];
for (int i = 0; i<N; i++) {
scanf("%i", &arr[i]);
pro = (pro*arr[i]) % (1000000007);
}
printf("%i", pro);
}
给出了错误的答案,但是当我将 int arr[N] 替换为 long int arr[N] 并将其精度说明符更改为 %li 时,它给出了正确的输出。
我的困惑是当数组元素的上限仅为10^3 时,为什么使用 long int 而不仅仅是int。
我正在使用 64 位 Windows 操作系统,我给出的输入是 3 位数字
作为数组元素,例如 568,253 等,开头没有任何 0。
【问题讨论】:
-
您的标题提到了
long long int,但您的问题并未提及该类型。也许从 Monika 的标题中删除它? -
limits of integer types 在
<limits.h>头文件中定义。您还可以使用sizeof运算符非常轻松地检查限制,因为它会告诉类型使用的字节数,然后可以将其转换为定义范围的位数。请记住,标准整数类型的大小可能因系统、平台、编译器而异,甚至在不同平台上的同一编译器之间也可能不同。 -
真正的问题是
int在您的特定系统上的大小。在具有 32 位整数的系统上,我不希望long int改变任何东西。您使用的是嵌入式系统还是 Turbo C 之类的旧 DOS 垃圾? -
可能你的系统默认
int为short int。否则int arr[N]和long int arr[N]与默认int相同,即longin32 bitsystem。 -
也许它与限制无关,但与“%i”有关。看看这是否有帮助:geeksforgeeks.org/difference-d-format-specifier-c-language
标签: c