正如标题所说,我在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)));
Zero方法返回一个字符串,其值为0,是指定数字的倍数.I.e Zero(1)
将返回:&#34; 0&#34;
我需要这种方法,因为方法Next(Int32)
可以返回一个数字,直到括号之间指定的数字。 I.e Next(10)
将返回0到9之间的数字。
我想生成一个数字大于9的数字,并将数字放入字符串numToSend
。我不能简单地这样做,因为方法Next()
只能生成int
s。
答案 0 :(得分:0)
即使在您编辑之后,我也没有发现问题非常明确。但是,我确实认为您理解您实际上是在尝试生成随机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)个数字的概率为1/100
如果您想要与此不同的内容,请更详细地了解您想要的输出的完全要求(请阅读https://stackoverflow.com/help/how-to-ask以获取有关如何明确提出问题的建议,负责任的方式)。
例如,上述内容不会在某个任意范围内生成随机值; (独占)最大值只能是10的幂。此外,由于BigInteger
的工作方式,如果您要查找具有特定数量的二进制数字的值,你可以简单地使用Random.NextBytes()
方法,传递结果数组(根据需要进行修改以确保例如正值)。
另请参阅C# A random BigInt generator获取更多灵感(我会将其作为副本投票,但从您的描述中可能看起来您可能正在寻找与该问题中请求的结果略有不同的结果)。< / p>