20150328晚,不使用乘号运算符实现两个数相乘

//20150328晚,不使用乘号运算符实现两个数相乘
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)

//using namespace std;

int main()
{
    int m, n, t;
    long long ll, absn, absm;
    while (scanf("%d %d", &m, &n) != EOF)
    {
        absn = n; absm = m; ll = 0; t = 0;
        if (m < 0) absm = 0 - absm;
        if (n < 0) absn = 0 - n;
        for (int i = 1; i > 0; i <<= 1)
        {
            if (i&absn)
                ll += absm << t;
            t++;
        }
        if ((!(m < 0 && n < 0)) && (m < 0 || n < 0)) ll = 0 - ll;
        printf("%lld\n", ll);
    }
    return 0;
}
时间: 2024-10-23 11:02:02

20150328晚,不使用乘号运算符实现两个数相乘的相关文章

51.从键盘上输入任意两个数和一个运算符(+、-、*、/),根据输入的运算符对两个数计算,并输出结果

?#include<iostream> using namespace std; int main() { int x,y; char a; cout<<"please input two numbers: "<<endl; cin>>x>>y; cout<<"please input an operational character:"<<endl; cin>>a; s

两个数相乘的实验

一.实习目的与要求 掌握乘法指令和循环指令的用法. 二.实习内容 实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来 三.代码 data segment left db '45','$';定义十进制相乘左操作数 right db '23','$';定义十进制相乘右操作数 Bleft dw 0; Bright dw 0; result db 0; c10 dw 10;十进制进位数 msgOne db 'The left num is:','$' msgTwo db

求两个数相乘

# include<stdio.h> int product(int,int); int main(void) { int x,y,s; scanf("%d %d","&x,&y); s=product(x,y); printf("The multiple is:%d",s); return 0; } int product(inta,intb) { int mul; mul=a*b; return mul; } 原文地址:ht

C语言求两个数中最大公约数

在C语言中如何求两个数的最大公约数呢?下面用三种方法进行求解. 方法一:穷举法. 先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低. 代码如下: #include<stdio.h> int main() {      int num1,num2,temp,i;      scanf("%d%d",&num1,&num2);      if(num1>num2)      {            temp=num1

求两个数的最小公倍数

1.非递归实现(两个数相乘再除以最大公约数) int max_common_doulbe(int a, int b) { int nMax=a>b?a:b; int nMin=a<b?a:b; while(nMin) { int nTmp=nMax%nMin; nMax=nMin; nMin=nTmp; } int nMaxGY=nMax; //最大公约数 return a*b/nMaxGY; } 2. 递归实现 int max_common_doulbe(int a, int b, int

C++重载加号运算符实现两个结构体的相加

#include<iostream> #include<string> using namespace std; struct S { int a, b; string str; S operator+(const S &others) { S s1; s1.a = this->a + others.a; s1.b = this->a + others.a; s1.str += this->str; s1.str += others.str; return

不使用四则运算符计算两个整数的和

这里笔者只写出关键代码: int add(int n,intm) {   if(m==0) returnn;      ①    int sum=n^m;           ②    int carry=(n&m)<<1;    ③    return add(sum,carry); ④} 在分析每步代码之前先看两个例子:不带进位的两数相加:0000 0010------20000 0100------4结果是:0000 0110------6带进位的两数相加:0000 0101--

两个常见位操作面试题 不用加减乘除运算符计算两数之和及a b 3

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net <两个常见位操作面试题不用加减乘除运算符计算两数之和及a=b*3> 地址:http://blog.csdn.net/morewindows/article/details/8710737转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/MoreWindows 上一篇<位操作基础篇之位操作全面总结>

如何不使用第三个变量来交换两个数的值

最近在看<c++从入门到精通>自学c++,里面有一道课后题是如何做到不适用第三个变量来交换两个数的值,以下是我在网上查找到的资料,记录下并作为笔记. 题目:a=10,b=15,将a / b的值互换. 通常我们的做法是(尤其是在学习阶段):定义一个新的变量,借助它完成交换.代码如下:      int a,b;      a=10; b=15;      int t;      t=a; a=b; b=t;      这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用