题目是  .求1000以内不能被7整除的数的和
某人代码如下   答案证实是对的    num为传进去的参数  即本题的1000  public static int sum(int num) { 
        if(num < 0) { 
            throw new IllegalArgumentException("num must be positive number."); 
        } 
        int s = (num * (num + 1)) / 2; 
        int a = 0; 
        while(a <= num) { 
            s -= a; 
            a += 7; 
        } 
        return s; 

解决方案 »

  1.   

    public static int sum(int num) { 
            if(num < 0) { 
                throw new IllegalArgumentException("num must be positive number."); 
            } 
            int s = (num * (num + 1)) / 2; //算出0+1+2+...+1000的和,就是(上底+下底)*高/2;类似于求梯形面积那样求
            int a = 0; 
            while(a <= num) { 
                s -= a; 
                a += 7; //把是7的倍数(0,7,14,21...)减去,最后剩下的就是不是7的倍数的和了
            } 
            return s; 

      

  2.   

    哈哈,我说这段代码怎么这么熟悉呢实际上很简单,先通过数学公式计算 1 到 num 的和,公式如下:然后再减去 7、14、21 等 7 的倍数直到 7 的倍数值大于 num 为止。
      

  3.   

    根据这个公式,还能有更好的算法:public class Test {    public static void main(String[] args) {
            System.out.println(sum(1000));
        }    public static int sum(int num) {
            if (num < 0) {
                throw new IllegalArgumentException("num must be positive number.");
            }
            return (num * (num + 1)) / 2 - 7 * (num / 7 * (num / 7 + 1)) / 2;
        }
    }其中 结果为 
      

  4.   

    先做了num以内的和,再减去7的倍数,同楼上
      

  5.   

    要说算法   这个算法谈不上效率我当时只是看了这个算法想知道写这东西的人的思路你们说的  先计算1到num的和  再减去7的倍数   这   猪都看的出来好不我想问的是  1到num的和再减去7的倍数 为什么就是答案
      

  6.   

    好  按照8楼说的  减去7的倍数   剩下的就是  不是7的倍数  那意思是   (num * (num + 1))/2   算出来的结果是1到1000的和?  
      

  7.   

    不好意思  我看懂了   1+2+...+n = n(n+1)/2这个公式如果是对的  那我就懂了  惭愧   高中学的排列组合全忘完了