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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fanxia_2007 中级黑马   /  2015-4-18 01:08  /  1013 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求1+2+3+...+n的值,要求不能使用乘除法、for、while、if、else、switch、case关键字以及条件判断语。

20 个回复

倒序浏览
  1. public static int getSum(int num) {
  2.                 if (num <= 0) {
  3.                         System.out.println("输入大于0的数");
  4.                 }
  5.                 if (num != 1) {
  6.                         return getSum(num - 1) * (num);
  7.                 }else {
  8.                         return 1;
  9.                 }
  10.         }
复制代码
回复 使用道具 举报

要求不能用if条件判断语句哦。
回复 使用道具 举报
lslkkk 来自手机 中级黑马 2015-4-18 07:42:24
板凳
这么多要求:L
回复 使用道具 举报
将楼上的代码改下
  1.         public static int getSum(int num) {

  2.         return   num<=0?0:num!=1?getSum(num - 1) + (num):1;
  3.         
  4. }
复制代码



点评

好答案,三元运算也是一种判断啊。。。不知道出题人什么意思  发表于 2015-4-18 09:40
回复 使用道具 举报
  1. package com.xlunaer.alan;

  2. /**
  3. * 思路 : 1: 把sum定义为静态成员变量。
  4. *        2: 写一个迭代方法,迭代出所求的和。
  5. *        3:在构造方法中调用迭代方法求出并打印和,打印结束后将sum清零。
  6. *
  7. * @author Eli
  8. *
  9. */
  10. public class Demo {

  11.         //定义静态变量sum
  12.         static int sum = 0;

  13.         //迭代函数   
  14.         // n :求和的项数
  15.         private boolean add(int n) {
  16.                 sum += n;
  17.                 //若n-1 为 0 ,则不再迭代,否则返回add(n-1),add(n-1)继续求和
  18.                 return ((n - 1 == 0) || add(n - 1));
  19.         }

  20.         Demo(int n) {
  21.                 //调用迭代方法
  22.                 add(n);
  23.                 //打印结果
  24.                 System.out.println(sum);
  25.                 //将sum置0
  26.                 sum = 0;
  27.         }

  28.         public static void main(String[] args) {

  29.                 //新建对象,求和 1 -- 10
  30.                 Demo d = new Demo(10);
  31.                 //新建对象,求和 1 -- 100
  32.                 Demo d1 = new Demo(100);
  33.         }

  34. }
复制代码
回复 使用道具 举报
海带 中级黑马 2015-4-18 09:27:38
7#
楼上的答案满足要求了
回复 使用道具 举报
mono 中级黑马 2015-4-18 09:37:09
8#
学习一下、
回复 使用道具 举报
太牛了,学习学习
回复 使用道具 举报
真正地大神啊
回复 使用道具 举报
adalvik 发表于 2015-4-18 08:40
将楼上的代码改下

如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num
否则
返回1
但是我很疑惑啊。递归到最后会返回1啊。
回复 使用道具 举报
曾宇 发表于 2015-4-18 15:16
如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num
  1. public static int run(int n)
  2.         {
  3.                 //return n<=0?0:n!=1?run(n-1)+n:1;
  4.                 if(n<=0)
  5.                          return 0;
  6.                 else if(n!=1)
  7.                          return run(n-1)+n;
  8.                 else
  9.                          return 1;

  10.         }
复制代码


修改测试后发现,+n最后计算。原来如此,这个1代表n=1的时候+1
回复 使用道具 举报
曾宇 发表于 2015-4-18 15:16
如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num

返回1 之后还会执行到 getSum 函数 和之前运算的结果相加之后才return
回复 使用道具 举报
adalvik 发表于 2015-4-18 15:43
返回1 之后还会执行到 getSum 函数 和之前运算的结果相加之后才return

学习了。:lol
回复 使用道具 举报
乖乖,这题目谁出的?打死他,现实中有这么刁钻的项目题吗
回复 使用道具 举报
战略性mark,看到相关知识再回来看
回复 使用道具 举报
应该递归可以解决吧!!!
回复 使用道具 举报
adalvik 发表于 2015-4-18 08:40
将楼上的代码改下

出题人唯一没有限定的是三元运算符,估计就是让用三元运算符吧,代码很简化。
回复 使用道具 举报
不错,顶的人不多啊,快点继续
回复 使用道具 举报
用三元运算符也是够厉害的   
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马