欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

两数相除111

最编程 2024-10-04 10:35:28
...

1.//给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

//整数除法应该向零截断,也就是截去(truncate)其小数部分。

// 例如,8.345 将被截断为 8 , - 2.7335 将被截断至 - 2 。

//返回被除数 dividend 除以除数 divisor 得到的 商 。

//注意:假设我们的环境只能存储 32 位 有符号整数,其数值范围是[−231, 231 − 1] 。

// 本题中,如果商 严格大于 231 − 1 ,则返回 231 − 1 ;如果商 严格小于 - 231 ,则返回 - 231 。

//示例 1:

//输入: dividend = 10, divisor = 3

//输出 : 3

//解释 : 10 / 3 = 3.33333..,向零截断后得到 3 。

//示例 2 :

// 输入 : dividend = 7, divisor = -3

// 输出 : -2

// 解释 : 7 / -3 = -2.33333..,向零截断后得到 - 2 。

2.我们要知道dividend=count*divisor,然后返回count,就可以了。先判断当dividend >0,divisor=0或者正负1的时候,进行判断,然后判断dividend=0或者正负1的时候,进行判断。然后将dividend,divisor均处理成负数,防止溢出,(注意:被除数绝对值小于除数绝对值)。然后每次相减divisor,count++,res=res+count.(注意:判断dividend是否不于0,如果大于0,说明减多了,有返回一步)。

#include<stdio.h>

int divide(int dividend, int divisor) {

    int res, count;

    int temp;

    int flag = 0;

    //判断当dividend >0&& divisor == -1|| divisor == 1的时候

    if (dividend >0&& divisor == -1|| divisor == 1) {

        if (divisor == -1)

            return -dividend;

        if (divisor == 1)

            return dividend;

    }

    //判断dividend =0

    if (dividend == 0)

        return 0;

    if (divisor == 1)

        return dividend;

    if (divisor == -1)

        return -dividend;

 

    // 均处理成负数,防止溢出

    if (dividend > 0 && divisor < 0) {

        flag = 1;

        dividend = -dividend;

    }

 

    if (dividend < 0 && divisor > 0) {

        flag = 1;

        divisor = -divisor;

    }

 

    if (dividend > 0 && divisor > 0) {

        dividend = -dividend;

        divisor = -divisor;

    }

 

    if (dividend == divisor) {

        if (flag == 0)

            return 1;

        else

            return -1;

    }

 

    // 被除数绝对值小于除数绝对值

    if (dividend > divisor)

        return 0;

 

    temp = 0;

    count = 1;

    res = 0;

    //线性增长着减,每次减dividend==count*|divisor|

    while (dividend <= divisor) {

        temp += divisor;

        dividend -= temp;

        res = res + count;

        count++;

    }

    //减多了,倒回去再一个一个减

    if (dividend > 0) {

        dividend += temp;

        res = res - count + 1;

        while (dividend <= divisor) {

            dividend -= divisor;

            res++;

        }

    }

 

    if (flag == 1)

        res = -res;

 

    return res;

}

int main()

{

    int i = 0;

    int j = 0;

    scanf_s("%d%d", &i, &j);

    int dev = divide(i, j);

    printf("%d\n", dev);

 return 0;

}

喜欢给个赞赏吧!6aa419d8ea454a8b882e141776f58a5a.png