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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wangyafeng1990 于 2013-10-19 20:03 编辑

从10+11+12+........+80的和,最好给出最优的代码,即代码能够复用

评分

参与人数 1技术分 +1 收起 理由
李江 + 1 勤学好问,加油哦...

查看全部评分

20 个回复

倒序浏览
用两头相加,中间确定奇偶,可能快点{:soso_e120:},不会是考试题吧

点评

这个跟我想要的答案接近了  发表于 2013-10-18 21:13
回复 使用道具 举报 1 0
  1.         public int getSum(int start,int end) {
  2.                 return (start + end)*(end - start + 1)/2;
  3.         }
复制代码
哈哈,直接求和公式

评分

参与人数 1黑马币 +16 收起 理由
wangyafeng1990 + 16 很给力!

查看全部评分

回复 使用道具 举报
int getSum(int min,int max){
                        int sum = 0;
                        if(min>max){
                                int temp = max;
                                max = min;
                                min = temp;
                        }
                                for(int i = min;i<=max;i++){
                                        sum+=i;
                                }
                        return sum;
                }
//这样,应该可以

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
看看这个怎样?

  1. public class Sum {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                
  7.                 int start=1;
  8.                 int end=100;
  9.                 int sum=0;
  10.                
  11.                 for(int i=start;i<=end;i++)
  12.                         sum=sum+i;
  13.                
  14.                
  15.                 //start+"+"+(start+1)+"+"+(start+2)+"+...+"+end+"=":这句代码主要是让显示的好看点
  16.                 System.out.println(start+"+"+(start+1)+"+"+(start+2)+"+...+"+end+"="+sum);

  17.         }

  18. }
复制代码
回复 使用道具 举报
風諾 发表于 2013-10-18 20:49
哈哈,直接求和公式

这个确实比较简单....
回复 使用道具 举报
你看到io流那里了吗?我用键盘输入试了试,你再试试这个。
  1. import java.io.BufferedReader;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;

  5. public class Sum {

  6.         /**
  7.        
  8.          */
  9.         public static void main(String[] args) throws NumberFormatException, IOException {
  10.                
  11.                 System.out.print("请输入开头的数字:");
  12.                 BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
  13.                 int start=Integer.parseInt(bf.readLine());
  14.                
  15.                 System.out.print("请输入结束的数字:");
  16.                 int end=Integer.parseInt(bf.readLine());
  17.                
  18.                
  19.                 int sum=0;
  20.                
  21.                 for(int i=start;i<=end;i++)
  22.                         sum=sum+i;
  23.                
  24.                
  25.                 //start+"+"+(start+1)+"+"+(start+2)+"+...+"+end+"=":这句代码主要是让显示的好看点
  26.                 System.out.println(start+"+"+(start+1)+"+"+(start+2)+"+...+"+end+"="+sum);

  27.                
  28.                 bf.close();
  29.         }

  30. }
复制代码
回复 使用道具 举报
定义一个静态方法类,使用时直接调用该类的方法就行了。
有什么新功能再往里添加,复用性也很好啊。
  1. public class NumDemo {
  2.         public static void main(String[] args) {
  3.                 int num = numTest.numSum(10, 80);
  4.                 System.out.println(num);
  5.         }
  6. }

  7. class numTest {
  8.         public static int numSum(int num_1, int num_2) {
  9.                 int sum = 0;
  10.                 for (int x = num_1; x <= num_2; x++) {
  11.                         sum += x;
  12.                 }
  13.                 return sum;
  14.         }
  15. }
复制代码
回复 使用道具 举报
首先感谢各位的积极回复,但是大家的想法太局限了,简单的问题才难
这是我的解答:
public static int add(int start,int end)
        {       
                if(start==end) return end;
                return add(start+1,end)+start;
        }

点评

哥们 你确定要用递归? 小心给你来个大范围的数 栈会爆掉的!!!!  发表于 2013-10-19 12:48
回复 使用道具 举报
楼主能想到用递归解决这个小问题,确实挺新奇的。
但是楼主所列的递归方法相比于最简单的for循环求和,效率并没有提高,反而降低了程序可读性。玩玩还是可以的。
其实效率最高的是求和公式~~
回复 使用道具 举报
赖波 中级黑马 2013-10-18 22:25:58
11#
用for的我想说我第一个输入2,第二个输入10000000000000,计算机比人都慢了
回复 使用道具 举报
風諾 中级黑马 2013-10-18 23:45:44
12#
赖波 发表于 2013-10-18 22:25
用for的我想说我第一个输入2,第二个输入10000000000000,计算机比人都慢了

throw new RuntimeException("你玩我");
回复 使用道具 举报
wangyafeng1990 发表于 2013-10-18 21:13
首先感谢各位的积极回复,但是大家的想法太局限了,简单的问题才难
这是我的解答:
public static int add( ...

递归这东西,我只能明白什么叫递归,确不知道怎么写递归,这是靠死记硬背的吗?如果不是,那请问你的思路是?怎么想出这递归来的,能说说你的分步骤思考吗?谢谢!!
回复 使用道具 举报
赖波 发表于 2013-10-18 22:25
用for的我想说我第一个输入2,第二个输入10000000000000,计算机比人都慢了

被你这么一说...感觉好丢脸啊...:'(
是我自己没多想,其实知道那个公式的,觉得这个写出来比较简单
回复 使用道具 举报
我能学编程吗 发表于 2013-10-19 01:50
递归这东西,我只能明白什么叫递归,确不知道怎么写递归,这是靠死记硬背的吗?如果不是,那请问你的思路 ...

首先考虑参数个数,然后就是递归:即方法在方法体里面在写一遍,这时候要考虑参数的变化,最后就是考虑递归的出路,不能无限递归下去
回复 使用道具 举报
递归,一般用数学的归纳法,找出递推式,或分段递推式,
再用编程思想转换成递归,稍微修改细节,当然其它方法也有,
写几个简单的慢慢找出规律
回复 使用道具 举报
递归到了一定的层数,直接爆,溢出,慎用
回复 使用道具 举报
现在的电脑是不是差不多是多核超线程的,我们可以开启多线程来解决这个问题,试想一下那些天文数字该如何进行的呢?
我觉得应该可以用多线程技术。
回复 使用道具 举报

如果楼主已经解惑,请将帖子改为提问结束
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马