相关疑难解决方法(0)

检查一个整数是否是另一个整数幂

这是一个采访问题:"给定2个整数x和y,检查x是否是y的整数幂"(例如,对于x = 8和y = 2,答案是"真",对于x = 10和y = 2 "假").

明显的解决方案是:

int n = y; while(n < x) n *= y; return n == x
Run Code Online (Sandbox Code Playgroud)

现在我在考虑如何改进它.

当然,我可以检查一些特殊情况:比如他们xy应该是奇数或偶数,也就是说,我们可以检查的至少显著位xy.但是我想知道我是否可以改进核心算法本身.

algorithm math

29
推荐指数
3
解决办法
2万
查看次数

以对数方式记录1,10,100,1000等

是否有一种更有效的方法来做到这一点,有些事情只是感觉不对劲?我正在寻找以对数方式记录最有效的方法.

    public bool Read()
    {
        long count = Interlocked.Increment(ref _count);
        switch (count)
        {
            case 1L:
            case 10L:
            case 100L:
            case 1000L:
            case 10000L:
            case 100000L:
            case 1000000L:
            case 10000000L:
            case 100000000L:
            case 1000000000L:
            case 10000000000L:
            case 100000000000L:
            case 1000000000000L:
            case 10000000000000L:
            case 100000000000000L:
            case 10000000000000000L:
            case 100000000000000000L:
            case 1000000000000000000L:
                _logger.LogFormattable(LogLevel.Debug, $"{count} Rows Read");
                break;
        }

        return _reader.Read();
    }
Run Code Online (Sandbox Code Playgroud)

更新:

这是我的微基准测试.

  • 方法1:Übercoder跟上状态的方式
  • 方法2:我使用big switch语句
  • 方法3:Markus Weninger用漂亮的数学函数的方法

因为对我而言,没有记录就读取了100,000,000条记录需要大约20分钟,那么额外的4秒就没有了.我将采用美丽的数学方式做事.Mathod3在我的场景中胜出.

Run time for 100,000,000 iterations averaged over 100 attempts

Method1 Max: 00:00:00.3253789
Method1 Min: …
Run Code Online (Sandbox Code Playgroud)

.net c# logarithm

5
推荐指数
1
解决办法
358
查看次数

标签 统计

.net ×1

algorithm ×1

c# ×1

logarithm ×1

math ×1