2016-05-31 7 views
-4

どのようにして整数を連結しますか?同様に、このような単純なプログラムを作ったとしましょう:整数の連結

int concatenate(int i, int j) { 

} 

そして、私はその関数に2つの整数を与えました。 iは1になり、jは9になります。数字を連結して123456789を得ることができますか?

int concatenate(int i, int j) { 
    int result = 0; 
    for (int x = i; x <= j; x++) { 
     result = result * 10 + x; 
    } 
    return result; 
} 
+0

私は 'count'と呼ばれるintを持つことを考えていましたが、カウントの増分として前の数にその数を加えました。したがって、 'i'が3で' j'が5の場合、 'count'も' i'と等しくなり、 'j'に達するまで数字を追加します。 –

+0

'i'が3、' j'が '5'の場合に期待される出力は? – Pang

+0

@Pang、 '345'私が思ったばかげたものを試してみてください。 :P –

答えて

1

は、このしてみてください。戻り値の型をlong以上に変更してみてください。それで、std::stolが役に立ちます。

0

std::to_string

#include <string> 

int concatenate(int i, int j) { 
    std::string result = ""; 
    for (; i <= j; ++i) 
     result += std::to_string(i); 
    return std::stoi(result); 
} 

を使用して別の方法しかし、それはオーバーフローやすいことがあります。

0

ドメイン[0,9]にijを制限する場合は、10×10のルックアップテーブルは、パフォーマンスの高いソリューションのようになります。

long concatenate_lookup[10][10] = { 
    {   0L,   1L,  12L,  123L, 1234L, 12345L, 123456L, 1234567L, 12345678L, 123456789L}, 
    {  10L,   1L,  12L,  123L, 1234L, 12345L, 123456L, 1234567L, 12345678L, 123456789L}, 
    {  210L,  21L,  2L,  23L, 234L, 2345L, 23456L, 234567L, 2345678L, 23456789L}, 
    {L,  321L,  32L,  3L,  34L, 345L, 3456L, 34567L, 345678L, 3456789L}, 
    {L,  4321L,  432L,  43L,  4L, 45L, 456L, 4567L, 45678L, 456789L}, 
    {L,  54321L,  5432L,  543L,  54L,  5L,  56L,  567L,  5678L,  56789L}, 
    {L, 654321L, 65432L, 6543L, 654L, 65L,  6L,  67L,  678L,  6789L}, 
    {L, 7654321L, 765432L, 76543L, 7654L, 765L,  76L,  7L,  78L,  789L}, 
    {L, 87654321L, 8765432L, 876543L, 87654L, 8765L, 876L,  87L,  8L,  89L}, 
    {L, 987654321L, 98765432L, 9876543L, 987654L, 98765L, 9876L,  987L,  98L,   9L} 
}; 

long concatenate(long i, long j) { 
    assert(i>=0 && i<=9 && j>=0 && j<=9); 
    return concatenate_lookup[i][j]; 
} // end concatenate() 

フルを処理するためにlongの代わりintを使用する必要があります可能な出力の範囲。