我已经写了一些代码来解决英国的信息奥林匹克问题1(2012)在C。 如果对任何人有任何帮助,或者可能感兴趣的话,程序会find一个数字的唯一主要因素的乘积。 如果数字是素数,则返回原始数字。
它应该可以达到1 000 000的input,而且在linux和mac上编译时也是如此。
由于某些原因,当它在Windows上编译(使用mingw编译器)时,对于520558以上的input不起作用!
这可能是与520558整数数组的声明很长,但我不知道如何补救它。
如何从Windows系统将文件从Python脚本复制到任何其他远程服务器?
我怎么会在Windows 64位与python调用32位exes?
无法find或加载Qt平台插件“窗口” – cx_freeze(.exe)
如何在.NET中确定我的Monitor的真实像素大小?
任何帮助将非常感激
谢谢。
码:
#include <stdio.h> #include <stdlib.h> int main(int argc,char* argv[]){ printf("Please enter your input: "); int input; scanf("%d",&input); int numbers[input-2]; for (int i=0;i<input-2;i++) { numbers[i] = i+2; } for (int i=0;i<input-2;i++) { if(numbers[i] == 0) { continue; }else{ for (int j=(i+2)*2;j<input;j+=numbers[i]){ numbers[j-2] = 0; } } } int product = 1; for (int i=0;i<input-2;i++) { if(numbers[i]!=0){ if(input%numbers[i]==0) { product *= numbers[i]; } } } if(product == 1){ printf("%u",input); }else{ printf("%u",product); } printf("n"); // Get rid of this on mac and linuxs system("PAUSE"); return 0; }
如何创build一个DLL库的Python包装
Windows上最小的生产Django服务器
(C#)Windows窗体 – 透明的背景,同时捕获鼠标事件?
int numbers[input-2];
这将在堆栈上创建一个整数数组。 堆栈的大小有限; 这通常是几个兆字节或更少的二的幂。 520558是可疑接近2 ^ 19,建议2Mb堆栈区域。
如果你正在处理这么大的数组,你应该使用堆而不是:
int * numbers = (int*)malloc((input-2)*sizeof(int)); . . . free(numbers); return 0;
尝试用这个替换你的numbers声明:
int* numbers = (int *) malloc((input-2)*sizeof(int));
正如提到的那样,这将动态分配堆上的数组,避免任何可能的堆栈问题。 完成后您还应该释放它:
free(numbers);
在堆上而不是堆栈上分配numbers变量会更好:
#define MAxnuMS 1000000 int numbers[MAxnuMS]; int main() { ... }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。