编程实现两个正整数的除法

编程实现两个正整数的除法,当然不能用除法操作符。分析:只能通过移位运算来达到除法,multi<<=1; 看有多少个2^n和奇数倍组成。这样就可以组成一个结果的二进制位数

// return x/y.   之前版本有bug,没有考虑到负数的情况处理,下面给出修复版。

int div2()  //注意负数的处理
{
    int x=100;
    int y =-3;
    bool negative=false;
    printf("%d/%d",x,y);
    if(y ==0)
        return ~(1<<31);
    if(x*y <0)
    {
        x = abs(x);
        y = abs(y);
        negative = true;
    }
    int x_temp =x;
    int multi;
    int result_ans =0;


    while(y<=x_temp)
    {
        multi=1;
        while(y*multi<=(x_temp>>1))  //x_temp ,跳出来右移动1位,这样跳出来刚好,是倍数 
        {
            multi<<=1;  //以2的倍数上增加
        }
        result_ans+=multi;
        x_temp = x_temp - y*multi;  //2倍之后,剩下部分,继续判断,更新x_temp ,这样就可以补充奇数倍
    }
    if(negative)
        result_ans = -result_ans;
    printf("=%d\n",result_ans);
    return result_ans;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是Python代码实现: ```python def gcd(a, b): while b != 0: a, b = b, a % b return a num1 = int(input("请输入第一个正整数:")) num2 = int(input("请输入第二个正整数:")) print("{}和{}的最大公约数是{}".format(num1, num2, gcd(num1, num2))) ``` 代码实现辗转相除法,先判断两个数中哪个数比较大,然后进行辗转相除,直到余数为0,此时较小的数就是最大公约数。最后输出结果。 ### 回答2: 编程实现可以用Python语言的代码实现: ```python def gcd(a, b): while b != 0: a, b = b, a % b return a num1 = int(input("请输入第一个正整数: ")) num2 = int(input("请输入第二个正整数: ")) result = gcd(num1, num2) print("最大公约数是: ", result) ``` 以上代码首先定义了一个名为gcd的函数,使用了辗转相除法来求两个数的最大公约数。在主程序中,用户会被提示输入两个正整数,然后调用gcd函数来计算最大公约数,并将结果打印出来。 辗转相除法是一种求最大公约数的方法,其基本思想是通过逐步取余数的方式来找到最大公约数。具体实现上,使用while循环来重复进行除法操作,当余数变为0时,被除数即为最大公约数。 以上是用Python实现的简单代码,可以帮助用户计算两个正整数的最大公约数。 ### 回答3: 编程实现辗转相除法,可以通过以下步骤来实现: 1. 让用户输入两个正整数,例如A和B。 2. 使用辗转相除法来求最大公约数。具体步骤如下: - 初始化变量a为较大的输入数,b为较小的输入数。 - 使用循环,直到b为0为止。 - 在每次循环中,计算a除以b的余数,将结果保存在变量r中。 - 将a的值更新为b,b的值更新为r。 - 重复上述步骤,直到b为0。 3. 打印结果,即为最大公约数。 下面是一个Python编程实现的例子: ```python # 让用户输入两个正整数 A = int(input("请输入第一个正整数:")) B = int(input("请输入第二个正整数:")) # 使用辗转相除法求最大公约数 a = max(A, B) b = min(A, B) while b != 0: r = a % b a = b b = r # 打印结果 print("最大公约数为:", a) ``` 通过这段代码,我们可以让用户输入两个正整数,并使用辗转相除法求出它们的最大公约数,并将结果打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值