如标题所示,我正在用C#开发。
我想生成一个包含9个以上数字的数字,因此我考虑生成数字,然后是9。
例如,如果要生成一个具有10个数字的数字-我首先要生成一个具有以下数字的数字9个数字,然后是一个具有1位数字的数字。
如果生成数字20,则将生成第一个2个数字,每个数字9个数字,然后生成一个2个数字的数字。
这是我尝试过的:
for (int i = 0, j = (int.Parse(inputRandom.Text) % 9 == 0 ? int.Parse(inputRandom.Text) % 9 : int.Parse(inputRandom.Text) % 9 + 1); i < j; i++)
if (i < (int.Parse(inputRandom.Text) % 9 == 0 ? j % 9 : j % 9 + 1) - 1)
numToSend += (BigInteger)r.Next(int.Parse(1 + Zero((int.Parse(inputRandom.Text) % 9 + 8) * (inputRandom.Text.Length - 1))));
else
numToSend += (BigInteger)r.Next(int.Parse(1 + Zero(int.Parse(inputRandom.Text) % 9 * 9)));
零方法返回一个字符串,该字符串的0乘以指定的数字。即Zero(1)
返回:“ 0”,
我需要此方法,因为该方法Next(Int32)
可以返回一个数字,直到括号之间指定的数字为止。即Next(10)
返回0到9之间的数字。
我想生成一个数字,其数字大于9,然后将数字放入字符串中numToSend
。我不能简单地这样做,因为该方法Next()
只能生成int
s。
即使您进行了修改,但我仍然认为问题不太清楚。但是,我确实认为我理解您实际上是在尝试生成一个随机BigInteger
值,并且您希望该随机值在某个特定数字位数所定义的范围内。
例如,如果要求输入10位数字的值,则应返回0到9999999999之间的某个值。如果要求输入20位数的值,则应返回0到99999999999999999999之间的某个值。
基于这种理解,我相信这种方法应该可以满足您的要求:
BigInteger NextRandom(Random random, int digitCount)
{
BigInteger result = 0;
while (digitCount-- > 0)
{
result = result * 10 + random.Next(10);
}
return result;
}
请注意,返回的数字可能少于digitCount
实际数字。实际上,发生这种情况的几率总是十分之一。并且结果的几分之一机会少于(digitCount
-1)个数字,依此类推。
如果您想要与此有所不同,请更详细地说明所需输出的确切要求(请阅读https://stackoverflow.com/help/how-to-ask,以获取有关如何以清晰明了的方式提出问题的建议,负责任的方式)。
例如,上面的代码不会在某个任意范围内生成随机值;(唯一)最大值只能是10的幂。此外,由于BigInteger
工作原理,如果要查找具有特定位数的二进制数字的值,则可以简单地通过使用Random.NextBytes()
方法来实现,并传递结果数组(进行适当修改以确保例如正值)。
另请参见C#随机BigInt生成器,以获取更多启发(我会为重复生成器投票,但是从您的描述看来,您可能正在寻找与该问题所要求的结果略有不同的结果)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句