剑指offer 47、48:求1+2+3+...+n 、不用加减乘除做加法

47.题目描述
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
思路:通过逻辑运算,达到控制操作的效果。

class Solution {
public:
    int Sum_Solution(int n) {
        int sum=0;
        n && (sum=Sum_Solution(n-1) + n);//n控制累加操作
        return sum;
    }
};
# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
        return n and self.Sum_Solution(n-1)+n
        # write code here

python 中 and 返回值:a and b a为真 则 返回 b,a为假则返回a,即返回可进行运算的最后一位。
1 and 2 and 3 返回3
0 and 2 and 3 返回 0
1 and 0 and 3 返回0
1 and 2 and 0返回0
or 返回第一个为真的,都为假则返回0
1 or 2 返回 1
0 or 2 返回 2
0 or 0 返回 0
48.题目描述
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
思路:相加不进位:1+1=0,1+0=1,0+0=0 ==》异或操作
进位:1+1=1,1+0=0,0+0=0 ==》与操作 然后左移一位

class Solution {
public:
    int Add(int num1, int num2)
    {        
        int sum=0,carry=0;
        while(num1)
        {
            sum=num1^num2;
            carry=num1 & num2;
            num1=carry<<1;
            num2=sum;
        }
        return num2;
    }
};
# -*- coding:utf-8 -*-
class Solution:
    def Add(self, num1, num2):
        while num1:
            num1,num2=((num1 & num2)<<1) & 0xffffffff ,(num1^num2)&0xffffffff
        return num2 if num2 <=0x7fffffff else ~(num2^0xffffffff)
        # write code here
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值