我的杭电ACM2028哪里错了
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/08 02:49:12
我的杭电ACM2028哪里错了
程序自己运行了几个例子都没问题,但是在杭电里用C语言提交上去就是WA…… 高手帮看下哪里出问题了…… 题目是 求n个数的最小公倍数. 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的输出是一个32位的整数. PS.我main函数里的变量 j 是用来保存最后结果的,c是用来保存n个数的乘积的 #include typedef unsigned long ul; int main() { int n; ul a,b,c,j; while(scanf("%lu",&n)!=EOF) { c=1; scanf("%lu %lu",&a,&b); c=a*b; a=gcd(a,b); n-=2; while(n--) { scanf("%lu",&b); c=c*b; a=gcd(a,b); } j=c/a; printf("%lu\n",j); } return 0; } ul gcd(ul a,ul b) { ul r; if(a
程序自己运行了几个例子都没问题,但是在杭电里用C语言提交上去就是WA…… 高手帮看下哪里出问题了…… 题目是 求n个数的最小公倍数. 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数. 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行.你可以假设最后的输出是一个32位的整数. PS.我main函数里的变量 j 是用来保存最后结果的,c是用来保存n个数的乘积的 #include typedef unsigned long ul; int main() { int n; ul a,b,c,j; while(scanf("%lu",&n)!=EOF) { c=1; scanf("%lu %lu",&a,&b); c=a*b; a=gcd(a,b); n-=2; while(n--) { scanf("%lu",&b); c=c*b; a=gcd(a,b); } j=c/a; printf("%lu\n",j); } return 0; } ul gcd(ul a,ul b) { ul r; if(a
应该是精度问题,你那里写了 while(n--) { scanf("%lu",&b); c=c*b; //这里可能已经超出了32位的范围了 a=gcd(a,b); } 所以不能这样写,我是这样写的: #include using namespace std ; int nlcm ( int * a , int n ); int lcm ( int a , int b ); int gcd ( int a , int b ); int main () { int i , n , z ; while ( cin >> n ) { int * a = new int [ n ]; for ( i = 0 ; i < n ; i ++) { cin >> a [ i ]; } cout