7

私は2つの整数を持っています。15と6と私は156を取得したいです。私がすること:

int i = 15;
int j = 6;
Convert.ToInt32(i.ToString() + j.ToString());

これを行うためのより良い方法はありますか?

更新: あなたの素晴らしい答えのすべてに感謝します。簡単なストップウォッチテストを実行して、パフォーマンスへの影響を確認します。これは、私のマシンでテストされたコードです。

static void Main()
    {
        const int LOOP = 10000000;
        int a = 16;
        int b = 5;
        int result = 0;
        Stopwatch sw = Stopwatch.StartNew();
        for (int i = 0; i < LOOP; i++)
        {
            result = AppendIntegers3(a, b);
        }
        sw.Stop();
        Console.WriteLine("{0}ms, LastResult({1})", sw.ElapsedMilliseconds,result);
    }

そして、これがタイミングです:

My original attempt: ~3700ms 
Guffa 1st answer: ~105ms 
Guffa 2nd answer: ~110ms 
Pent Ploompuu answer: ~990ms 
shenhengbin answer: ~3830ms 
dasblinkenlight answer: ~3800ms
Chris Gessler answer: ~105ms

Guffaは非常に優れたスマートなソリューションを提供し、ChrisGesslerはそのソリューションに非常に優れた拡張方法を提供しました。

4

5 に答える 5

16

あなたはそれを数値的に行うことができます。文字列変換は必要ありません:

int i=15;
int j=6;

int c = 1;
while (c <= j) {
  i *= 10;
  c *= 10;
}
int result = i + j;

また:

int c = 1;
while (c <= j) c *= 10;
int result = i * c + j;
于 2012-07-04T00:45:01.530 に答える
3

拡張メソッドは次のとおりです。

public static class Extensions
{
    public static int Append(this int n, int i)
    {
        int c = 1;
        while (c <= i) c *= 10;
        return n * c + i; 
    }
}

そしてそれを使用するには:

    int x = 123;
    int y = x.Append(4).Append(5).Append(6).Append(789);
    Console.WriteLine(y);
于 2012-07-04T03:20:41.653 に答える
2
int res = j == 0 ? i : i * (int)Math.Pow(10, (int)Math.Log10(j) + 1) + j;
于 2012-07-04T00:45:01.950 に答える
0

使いたいstring.Concat(i,j)

于 2012-07-04T07:55:42.887 に答える
-2
int i=15
int j=6
int result=i*10+6;
于 2012-07-04T01:46:31.053 に答える