不使用运算符 /号实现两整数相除

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(div(1888888888,5));
            Console.Read();
        }

        /// <summary>
        /// 整数相除
        /// </summary>
        /// <param name="a">除数</param>
        /// <param name="b">被除数</param>
        /// <returns></returns>
        public static int div (int a,int b){
            List<int> history = new List<int>();

            double count = 0;
            while (true)
            {
                if (a - b < 0) break;
                history.Add(b);
                count++;
                a = a - b;
                b += b;

            }
            count = (Math.Pow(2, count)) - 1;
            for (int i =history.Count-1; i >-1; i--)
            {
                if (a < 1) break;
                if (a - history[i] < 0) continue;
                count += Math.Pow(2, i);
                 a -= history[i];

            }
            Console.WriteLine("余数为"+a);
            return (int) count;

        }
    }
}

  这里没有考虑被除数为0的情况

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            for (int i = 0; i < 1000000; i++)
            {
             int s=   div(1888888888, 5);
            }
            watch.Stop();
            Console.WriteLine("土方法耗时"+watch.ElapsedMilliseconds);
            watch.Reset();
            watch.Start();

            for (int i = 0; i < 1000000; i++)
            {
              int s=  (1888888888/5);
            }
            watch.Stop();
            Console.WriteLine("系统方法耗时" + watch.ElapsedMilliseconds);

            Console.Read();
        }

        /// <summary>
        /// 整数相除
        /// </summary>
        /// <param name="a">除数</param>
        /// <param name="b">被除数</param>
        /// <returns></returns>
        public static int div (int a,int b){
            List<int> history = new List<int>();

            double count = 0;
            while (true)
            {
                if (a - b < 0) break;
                history.Add(b);
                count++;
                a = a - b;
                b += b;

            }
            count = (Math.Pow(2, count)) - 1;
            for (int i =history.Count-1; i >-1; i--)
            {
                if (a < 1) break;
                if (a - history[i] < 0) continue;
                count += Math.Pow(2, i);
                 a -= history[i];

            }
            //Console.WriteLine("余数为"+a);
            return (int) count;

        }

    }
}

  

时间: 2024-10-19 12:53:28

不使用运算符 /号实现两整数相除的相关文章

Java两整数相除保留两位小数

在Java中 两个整数相除 会做取整运算,此时如果希望得到运算结果为浮点数 则必须将两整数其一或两者都强制转为为浮点数 例如: int a = 9; int b = 2; System.out.println((float)a/b); System.out.println(a/(float)b); System.out.println((float)a/(float)b); 保留两位小数 DecimalFormat df = new DecimalFormat("0.00"); Str

C语言中,两整数相除,若分母为零,则会出现怎样的结果???

1==首先编译的时候会给出如下warning:warning: division by zero. 然后运行时如果是"3.0 / 0"这样的(floating),会给出inf: 如果是"3 / 0"这样的(integer),会给出Floating point exception. 2==在vc中用F5执行会弹出一个对话框,内容为:Unhandled exceptiong in xxx.exe:0xC0000094:Integer Divide by Zero用ctr

【LeetCode每天一题】Divide Two Integers(两整数相除)

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer division should truncate toward zero. Example 1:             Inp

leetCode 29.Divide Two Integers (两整数相除) 解题思路和方法

Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 思路:这个题算法上不是很难,但是通过率相当低,只有15%,果然,自己在写完之后,各种出错,而且错误不是算法上的错误,是各种边界值没有考虑到,很多溢出错误等.下面是具体代码,有详细注释. public class Solution { p

python中两个整数相除得到浮点数的值的方法

/********************************************************************* * Author  : Samson * Date    : 09/19/2014 * Test platform: *              Linux ubuntu 3.2.0-58-generic-pae *              GNU bash, version 4.2.39 * *****************************

【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】

[029-Divide Two Integers(两个整数相除)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 题目大意 不使用除法,乘法和取余,求两个整数的相除的结果,如果有溢出就返回最大的整数. 解题思路 任何一个整数可以表示成以2的幂为底

java 两个整数相除保留两位小数

java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数其一或是两者都强制转换为浮点数. 例如: (float)a/b // 将整数其中一个强制转换为浮点数,再与另一个整数相除 a/(float)b (float)a/(float)b // 将两个整数同时强制转换为浮点数后再相除 float num= (float)2/3; DecimalFormat df = new DecimalFormat("0.00");//格

C#中两个整数相除得到带小数点的结果

有时候需要将两个整数相除,获得带小数点的float类型数.例如一个整数12345,需要变成123.45.常见与串口与硬件通讯,DSP处理浮点型比较麻烦,DSP传递来的温度等数据都以整型的方式传递,串口控件接收到数据后,需要将温度值变成实际的值,就可能采用这种方式了. 例如: int itemp=3706; //实际值37.06℃int iNum=100; float ftemp = itemp/ iNum;那么结果就是37:而需要得到带小数点的结果,有以下几种方法: 1.double dtemp

LeetCode 29 Divide Two Integers(两个整数相除)(*)

翻译 不用乘法.除法.取余操作,将两个数相除. 如果它溢出了,返回MAX_INT 原文 Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 代码 一心扑到了递归上,可惜没能写出来----烦躁至极还是找了别人的答案-- class Solution { public: int divide(int dividend, int d