求1+2+3+...+n&&不用加减乘除做加法

求1+2+3+…+n

求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

解题思路

因为无法使用乘除法,所以n(1+n)/2就不能使用,不能使用for和while,所以循环无法使用

  1. 利用逻辑与的短路实现递归终止
  2. 当n==0,(sum>0)&&((sum+=Sum_Solution(–n))>0)只执行前面的判断,为false,直接返回0;
  3. 当n>0,执行sum+=Sum_Solution(–n),实现递归计算Sum_Solution(int n)

代码

/**
 * 剑指offer一刷:1+2+3+...+n
 *
 * @author User
 * @create 2019-06-02-14:58
 */

public class jzo47 {
    public int Sum_Solution(int n) {
        int sum=n;
        boolean flag=(sum>0)&&((sum+=Sum_Solution(--n))>0);
        return sum;
    }
    public static void main(String[] args){
        int n=100;
        jzo47 so=new jzo47();
        System.out.println(so.Sum_Solution(n));
    }
}

不用加减乘除做加法

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

解题思路

四则运算不能使用,需要将加法转化为位运算。

  1. 各位相加不计进位
  2. 记下进位
  3. 前两步相加
    在这里插入图片描述

代码

/**
 * 剑指offer一刷:不用加减乘除做加法
 *
 * @author User
 * @create 2019-06-02-15:16
 */

public class jzo48 {
    public int Add(int num1,int num2) {
            int sum,index;
           do {
               sum=num1^num2;
               index=(num1&num2)<<1;
               num1=sum;
               num2=index;
           }while (num2!=0);
           return num1;
    }
    public static void main(String[] args){
        int num1=5,num2=7;
        jzo48 so=new jzo48();
        System.out.println(so.Add(num1,num2));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值