3

私は現在、実行ごとにランダムな 9 桁の数字を生成する C# アプリケーションを構築しています。「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 に答える