zoukankan      html  css  js  c++  java
  • 3F

    求n个数的最小公倍数。

    Input

    输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。

    Output

    为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。

    Sample Input

    2 4 6
    3 2 5 7

    Sample Output

    12
    70

    // 数据溢出
     1 #include<stdio.h>
     2 
     3 int cmd(int a, int b)
     4 {
     5     int t=1;
     6     if(a<b)
     7     { t=a; a=b; b=t; }
     8     while(t!=0)
     9     { t=a%b; a=b; b=t; }
    10     return a;
    11 }
    12 
    13 int cmm(int a, int b)
    14 {
    15     int d;
    16     d=cmd(a, b);
    17     return a*b/d;
    18 }
    19 
    20 int main()
    21 {
    22     int n, x,y;
    23     while(~scanf("%d", &n))
    24     {
    25         y=1;
    26         while(n--)
    27         {
    28             scanf("%d", &x);
    29             y=cmm(x,y);
    30         }
    31         printf("%d
    ", y);
    32     }
    33     return 0;
    34 }
    WA
    // 把cmm()中的return a*b/d;改为return a/d*b; 在数据接近int能表示的最大值时,先乘很可能溢出
     1 #include<stdio.h>
     2 
     3 int cmd(int a, int b)
     4 {
     5     int t=1;
     6     if(a<b)
     7     { t=a; a=b; b=t; }
     8     while(t!=0)
     9     { t=a%b; a=b; b=t; }
    10     return a;
    11 }
    12 
    13 int cmm(int a, int b)
    14 {
    15     int d;
    16     d=cmd(a, b);
    17     return a/d*b;
    18 }
    19 
    20 int main()
    21 {
    22     int n, x,y;
    23     while(~scanf("%d", &n))
    24     {
    25         y=1;
    26         while(n--)
    27         {
    28             scanf("%d", &x);
    29             y=cmm(x,y);
    30         }
    31         printf("%d
    ", y);
    32     }
    33     return 0;
    34 }
    AC*2
    // 从最大数开始枚举
     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int n, x[100],y;
     6     while(~scanf("%d", &n))
     7     {
     8         y=1;
     9         for(int i=0;i<n;i++)
    10         {
    11             scanf("%d", &x[i]);
    12             y=y>x[i]?y:x[i];
    13         }
    14         for(int i=0;i<n;i++)
    15             if(y%x[i]!=0)
    16             { y++; i=-1; }
    17         printf("%d
    ", y);
    18     }
    19     return 0;
    20 }
    AC
    // 补充:用unsigned int能表示的正数多一些
  • 相关阅读:
    解决struts2在(IE,Firefox)下载文件名乱码问题
    Quartz 使用
    SpringBoot 全局异常处理器
    数据结构学习(五) Java链表实现队列
    数据结构学习(四) Java链表实现
    Linux 端口占用情况查看
    数据结构学习(三) 基于动态数组实现队列Queue
    数据结构学习(二)基于动态数组实现Stack(栈)
    SpringBoot 定时任务
    数据结构学习(一) Java中的动态数组实现
  • 原文地址:https://www.cnblogs.com/goldenretriever/p/10356863.html
Copyright © 2011-2022 走看看