【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
2014-12-25 21:34
357 查看
题目描述:
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。
输出:
对应每个测试案例,输出m+n的值。
样例输入:
样例输出:
【解题思路】求和而不用四则运算,我们可能需要联想到加法的机器实现,机器实现当然原理和位操作类似,所以,我们可以通过位操作来实现加法。
假设给出的num1和num2,首先我们将num1^num2得到那些0 1位应该相加,没有进位。然后,我们用num1&&num2得到所有进位组成的数,因为这个进位组成的数应该是左移一位然后加入到之前得到的那个没有进位的数中。若,还有进位,证明位操作还有冲突,需要继续左移并加入到之前的结果中。直到所有的进位处理完毕为止。
AC code:
#include <cstdio>
using namespace std;
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
int num1,num2;
do
{
num1=n^m;
num2=(n&m)<<1;
n=num1;
m=num2;
}while(num2!=0);
printf("%d\n",num1);
}
return 0;
}
/**************************************************************
Problem: 1507
User: huo_yao
Language: C++
Result: Accepted
Time:10 ms
Memory:1020 kb
****************************************************************/
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
输入:
输入可能包含多个测试样例。
对于每个测试案例,输入为两个整数m和n(1<=m,n<=1000000)。
输出:
对应每个测试案例,输出m+n的值。
样例输入:
3 4 7 9
样例输出:
7 16
【解题思路】求和而不用四则运算,我们可能需要联想到加法的机器实现,机器实现当然原理和位操作类似,所以,我们可以通过位操作来实现加法。
假设给出的num1和num2,首先我们将num1^num2得到那些0 1位应该相加,没有进位。然后,我们用num1&&num2得到所有进位组成的数,因为这个进位组成的数应该是左移一位然后加入到之前得到的那个没有进位的数中。若,还有进位,证明位操作还有冲突,需要继续左移并加入到之前的结果中。直到所有的进位处理完毕为止。
AC code:
#include <cstdio>
using namespace std;
int main()
{
int n,m;
while (scanf("%d%d",&n,&m)!=EOF)
{
int num1,num2;
do
{
num1=n^m;
num2=(n&m)<<1;
n=num1;
m=num2;
}while(num2!=0);
printf("%d\n",num1);
}
return 0;
}
/**************************************************************
Problem: 1507
User: huo_yao
Language: C++
Result: Accepted
Time:10 ms
Memory:1020 kb
****************************************************************/
题目链接:http://ac.jobdu.com/problem.php?pid=1507九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299
相关文章推荐
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
- 【剑指Offer面试编程题】题目1388:跳台阶--九度OJ
- 【剑指Offer面试编程题】题目1283:第一个只出现一次的字符--九度OJ
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
- 【剑指Offer面试编程题】题目1511:从尾到头打印链表--九度OJ
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
- 【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
- 【剑指Offer面试编程题】题目1354:和为S的连续正数序列--九度OJ
- 【剑指Offer面试编程题】题目1352:和为S的两个数字--九度OJ
- 【剑指Offer面试编程题】题目1360:乐透之猜数游戏--九度OJ
- 【剑指Offer面试编程题】题目1386:旋转数组的最小数字--九度OJ
- 【剑指Offer面试编程题】题目1366:栈的压入、弹出序列--九度OJ
- 【剑指Offer面试编程题】题目1522:包含min函数的栈--九度OJ
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 【剑指Offer面试编程题】题目1516:调整数组顺序使奇数位于偶数前面--九度OJ
- 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ
- 【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
- 【剑指Offer面试编程题】题目1388:跳台阶--九度OJ
- 剑指Offer - 九度1507 - 不用加减乘除做加法