3

我目前正在构建一个 C# 应用程序,它会生成一个随机的 9 位数字,每个数字都会运行。我正在寻找一种方法来排除以“666”开头的数字。我将如何编写一份声明以排除以某些数字开头的数字。

这是代码片段,以防万一。

Random SSN = new Random();
string temp = "";
int num = SSN.Next(100000000, 999999999);
temp = num.ToString();

谢谢!

4

5 回答 5

5

好吧,你可以写:

int num;
do {
   num = SSN.Next(100000000, 999999999);
} while (num >= 666000000 && num < 667000000);

(我最初也使用了字符串比较,但由于我们总是准确地得到 9 位数字,我们可以轻松地进行数字比较。)

于 2012-05-24T20:43:59.190 回答
4

简单的方法是:

Random SSN = new Random();
string temp = "";
do
{
    int num = SSN.Next(100000000, 999999999);
    temp = num.ToString();
} while (temp.StartsWith("666"));

如果您真的很注重效率并想不惜一切代价避免字符串比较和无界循环,您可以使用:

Random SSN = new Random();
int num = SSN.Next(100000000, 998999999);
if (num >= 666000000)
    num += 1000000;
于 2012-05-24T20:45:12.867 回答
2
Random SSN = new Random();
string temp = "";
double d = 0.6; // This will help on of choosing one half

int n1 = SSN.Next(100000000, 666000000);
int n2 = SSN.Next(667000000, 999999999);

int num = SSN.NextDouble() > d ? n1 : n2; 

temp = num.ToString();
于 2012-05-24T20:50:57.253 回答
0
Random SSN = new Random();
string temp = "";
do
{
    int num = SSN.Next(100000000, 999999999);
    temp = num.ToString();
} while(num.IndexOf("666") == 0);
于 2012-05-24T20:44:25.753 回答
0

这具有 O(1) 的复杂性。

                string temp = "";
                if (SSN.Next(0,999999999) < 588339221)
                {
                    temp = SSN.Next(100000000, 666000000).ToString();
                }
                else
                {
                    temp = SSN.Next(667000000, 1000000000).ToString();
                }
于 2012-05-24T20:48:46.030 回答