算法题:给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符

给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算

  • a,b为32为整数
  • 可以使用位运算符
class Solution {
public:
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b
     */
    int aplusb(int a, int b) {
        // write your code here
        if(b==0)
            return a;
        int sum = a^b;
        int i=(a&b)<<1;
        return aplusb(sum,i);
    }
};

sum为和,i为进位

链接;https://blog.csdn.net/ListentTome/article/details/79744852

原文地址:https://www.cnblogs.com/leafs99/p/algorithm_1.html

时间: 2024-11-09 01:57:47

算法题:给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符的相关文章

[算法学习]给定一个整型数组,找出两个整数为指定整数的和(3)

问题描述: 设计一个类,包含如下两个成员函数: Save(int input) 插入一个整数到一个整数集合里. Test(int target) 检查是否存在两个数和为输入值.如果存在着两个数,则返回true,否则返回false 允许整数集合中存在相同值的元素 分析: 与[算法学习]给定一个整型数组,找出两个整数为指定整数的和(2)不同,这里需要算出的是存不存在这两个数,可以在上一篇的基础上修改一下数据结构,HashMap其中key是数值,value是数值个数,然后需要作两步判断,map中存在数

笔试算法题(12):整数的string到int转换 &amp; 两个栈实现队列

出题:将输入的表示整数的字符串转变为对应的整数值: 分析: 每当右边增加一位,说明之前的sum应该高一个数量级,所以*10.由于这两个实现仅仅考虑正规的.正整数输入,所以需要一个Wrapper函数,其功能 主要处理:符号判断(第一个字符是-,+或者直接是数字):非法输入判断(是否有非"0123456789"的字符存在): 另外以string存在的整数极有可能是大整数,所以需要考虑int的溢出的情况,当然这已经超出本议题的范围,不做详细论述: 解题: 1 int NonRecursive

一道算法题-从1到n整数中1出现的次数

1. 题目描述 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次. 2. 题目来源 第一次看到是在<剑指Offer>第2版上,面试题32.leetcode和牛客网上都有这道题. 3. 本文的目的 看了<剑指Offer>上的解法,我觉得不能算好: 这段解释描述有些不清晰,而且没有图,难以理解. 从书中给出的实现上来看,显得有些凌乱. 在这篇博客里,会给出一个我对这道题的解法,包括完整

算法题:合并两个有序的链表

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:已知有两个有序的单链表,其头指针分别为head1和head2,实现将这两个链表合并的函数: Node* ListMerge(Node *head1,Node *head2) 这个算法很像我们排序算法中的归并排序,只能说“很像”,因为思想是一样的,但是这个与归并排序还是有区别的,区别如下:      1.归并排序是针对有序数组,而这里是有序链表:        2.归并排序排序的时间复杂度为o(nlogn),而这里的时间复杂度最坏情况下为O

算法题:合并两个有序列表

说明:这篇文章是学习交流,转载请注明出处.欢迎转载! 题目:已知有两个有序的单链表,其头指针分别为head1和head2.实现将这两个链表合并的函数: Node* ListMerge(Node *head1,Node *head2) 这个算法非常像我们排序算法中的归并排序.仅仅能说"非常像",由于思想是一样的,可是这个与归并排序还是有差别的.差别例如以下:      1.归并排序是针对有序数组.而这里是有序链表:        2.归并排序排序的时间复杂度为o(nlogn),而这里的时

C++算法之 找出两个链表的公共节点

题目:输入两个链表,找出它们第一个公共节点.链表节点定义如下: struct ListNode { int    m_nKey; ListNode*   m_pNext; } 方法1:在第一个链表上顺序遍历每一个节点,没遍历一个节点,在第二个链表上顺序遍历每个节点.  O(n^2) 方法2:找到两个链表的长度差,先遍历长链表到短链表的长度处,然后两个链表同时遍历,没遍历依次比较两个节点指针是否相同, 注意是比较节点指针,不是节点的值! 代码: // FindFirstCommandNode.cp

笔试算法题(14):整数二进制表示中的1 &amp; 判定栈的push和pop序列是否对应

出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位,k%2 ==0表示其是否是偶数,如果不是则说明当前二进制表示的最右边一位为1,当k==0成立的时候移位结束: 另外还可以使用'消1'的方法,如果二进制表示A为'****1000',则A-1为'****0111',也就是我们仅关注二进制表示最右边的第一个 1,这样的话A&(A-1)的结果就可以将最右边的

leetcode算法题2: 合并两个二叉树。递归,如何切入并保持清醒?

/* Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, t

算法题:确定两串乱序同构

题目描述 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串.这里规定大小写为不同字符,且考虑字符串重点空格. 给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同.保证两串的长度都小于等于5000. 测试样例: "This is nowcoder","is This nowcoder" 返回:true "Here you are","