A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘蕴学 中级黑马   /  2012-3-10 22:10  /  9716 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        public static void main(String[] args)
        {
                int sum = 0;
            for(int i = 100;i>0;i--)
            {
                    sum+=i;
            }
            System.out.println(sum);
        }
我这里用了一个优化,就是把与100做比较变成了与0做比较,速度略快,想问下你们还有更好的方案没有?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

13 个回复

倒序浏览
好像用 while 效率比for快
回复 使用道具 举报
等我做下测试看看,不习惯用while,不好控制流程
回复 使用道具 举报
既然求和,还是用100判断比较直观些吧!
回复 使用道具 举报
一样的速度吧!
回复 使用道具 举报
黑马张平 发表于 2012-3-10 22:20
一样的速度吧!

参见think in java,貌似是这本里的优化讲解那
回复 使用道具 举报
葛尧 中级黑马 2012-3-10 23:24:00
7#
优化啊,用数学公式。。
回复 使用道具 举报
石德志 黑马帝 2012-3-11 10:33:52
8#
解决问题就行
回复 使用道具 举报
递归实现

package com.iwit.test;

public class Testa {

        /*
         * 思路:先求每项的,后再求和即可
         */
        public static void main(String[] args) {
                int sum = 0;
                for (int i = 1; i <= 100; i++) {
                        sum += getPerItem(i);
                }
                System.out.println(sum);
        }

        public static long getPerItem(int i) {
                if (i == 1)
                        return 1;
                else
                        return 1 + getPerItem(i - 1);
        }
}
回复 使用道具 举报
其实大数学家高斯十岁的时候就有非常快速的解法:1+2+3+...+n=(1+n)*n/2
回复 使用道具 举报
         /**
         * 得到1与参数e之间(包含1和e)所有数的和,
         * @param e 表示需要求和数的最后一个,e必须为整数,浮点类型紧为了保证结果
         * @return 这些数的和
         */
        public static int getSum(float e)
        {
                return (int)((1+e)*(e/2));
        }

呵呵,按照楼上的写了一个函数,效率比循环快的太多了,不过话说高中数学都忘记的差不多了,表达式都不会做了
回复 使用道具 举报
袁野 黑马帝 2012-3-11 15:43:43
12#
没有区别吧  100 还是 0 觉得没什么区别
回复 使用道具 举报
袁野 发表于 2012-3-11 15:43
没有区别吧  100 还是 0 觉得没什么区别

底层对比总是0快

点评

谢谢 学习了  发表于 2012-3-11 17:15
回复 使用道具 举报
用数学公式,时间复杂度高下立判。
        public static int sumType1(int beginNum ,int endNum)//输入开始与结束的数字公差是1
        {
                int sum=(beginNum+endNum)*(endNum-beginNum+1)/2;                       
                return sum;               
        }
        public static int sumType2(int beginNum,int endNum,int dex)//输入第一项第n项以及公差
        {
                int count =(endNum-beginNum)/dex +1;                  
                return count*beginNum+(count-1)*(count)*dex/2;
        }

点评

这个有点高难度,呵呵,我辍学之前,还没学这些  发表于 2012-3-11 17:33
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马