//get first digit
int i=123456789;
while (i >= 10)
i /= 10;
Console.WriteLine(i);
//get second digit
int i1=123456789;
while (i1 >= 100)
i1 /= 10;
Console.WriteLine(i1%10);
//third digit
int i2=123456789;
while (i2 >= 1000)
i2 /= 10;
Console.WriteLine(i2% 10);
3条答案
按热度按时间waxmsbnn1#
但是,如果我运行大量的数据,这将需要很长的时间来铸造刺痛。。有没有更快的方法来做到这一点?
这类问题需要通过基准测试来回答,否则你会去优化那些不是问题的东西,因为你实际上并不知道问题是什么。
无论如何,也许您可以在这里节省几个ns,这意味着您可以节省的时间量很可能是由磁盘i/o而不是CPU时间来节流的,因为您说"这将花费太长时间",这只有在您试图解析几TB的整数时才有意义(每次解析为ns)...
快速benchmark.net测试结果
示例基准测试代码,对于测试目的来说,这只是"足够接近",但是代码并不能解决您的问题。
bvk5enib2#
如果我没理解错的话,你可以有一个10位数的int型,也可以有一个9位数的int型,这取决于第一个y是1还是0。
如果是这种情况,你基本上有这两个选项:
要确定第一个数字是1还是0,可以检查该值是否小于100000000:
8mmmxcuj3#
得到一个数的位数的最简单的方法是使用
ToString()
。但是最佳的解决方案是将这个数除以...