2016-05-31 18 views
-4

Wie würde man ganze Zahlen verketten. Wie, lassen Sie uns einfach sagen, dass ich ein einfaches Programm wie folgt aus:Verketten von ganzen Zahlen

int concatenate(int i, int j) { 

} 

Und ich gab dieser Funktion zwei ganzen Zahlen. i wäre 1 und j wäre 9. Wie könnte ich Zahlen verketten, so dass ich 123456789 bekommen könnte?

+0

Ich dachte darüber nach, einen int namens "count" zu haben und dann als count inkrementiert, es fügt auch diese Zahl auf die vorherige Zahl hinzu. Wenn also "i" 3 wäre und "j" 5 wäre, wäre "count" auch gleich "i" und addiert eine Zahl, bis es "j" trifft. –

+0

Was ist die erwartete Ausgabe, wenn 'i' 3 ist und' j' '5' ist? – Pang

+0

@Pang, '345' Ich habe gerade etwas Dummes versucht, an das ich gedacht habe. : P –

Antwort

1

versuchen Sie dies:

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

Ein anderer Weg 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); 
} 

mit, aber es kann leicht überlaufen. Versuchen Sie, den Rückgabetyp auf long oder höher zu ändern. Dann wäre std::stol nützlich.

0

Wenn Sie i und j die Domäne [0,9] beschränken, dann wäre eine 10x10-Lookup-Tabelle eine performante Lösung sein:

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() 

Es ist notwendig, long zu verwenden, statt int die volle handhaben Bereich der möglichen Ausgänge.

Verwandte Themen