2016-07-08 10 views
0
The decimal zip of two non-negative integers A and B is an integer C whose 
decimal representation is created from the decimal representations 
of A and B as follows: 

• the first (i.e. the most significant) digit of C is the first digit of A; 
• the second digit of C is the first digit of B; 
• the third digit of C is the second digit of A; 
• the fourth digit of C is the second digit of B; 
• etc. 

If one of the integers A and B runs out of digits, the remaining digits of 
the other integer are appended to the result. 

The decimal representation of 0 is assumed to be "0". 

For example, the decimal zip of 12 and 56 is 1526. 
The decimal zip of 56 and 12 is 5162. 
The decimal zip of 12345 and 678 is 16273845. 
The decimal zip of 123 and 67890 is 16273890. 

Write a function: function solution(A, B); that, given two non-negative 
integers A and B, returns their decimal zip. 

The function should return -1 if the result exceeds 100,000,000. 

For example, given A = 12345 and B = 678 the function should return 
16273845, as explained above. 

davon ausgehen, dass:Die dezimale zip von zwei nichtnegativen ganzen Zahlen A und B einer ganzen Zahl C

• A und B ganze Zahlen sind im Bereich [0..100,000,000].

hier ist meine Lösung, aber ich habe ein Array gebunden expection

so versuchte ich die ganze Zahl in String zu konvertieren, so dass ich sie verarbeiten, und die Ziffern zusammen zu fügen.

int solution(int A, int B) { 
    // write your code in C++11 (g++ 4.8.2) 
    if (A < 0 || A > 100000000) return -1; 
    if (B < 0 || B > 100000000) return -1; 

    string A_ = IntToString(A); 
    string B_ = IntToString(B); 
    string output = ""; 

    for (int i = 0; i < A_.size() || i < B_.size(); i++) { 

     if (A_[i]) { 
      output[i] = output[i] + A_[i]; 
     } 

     if (B_[i]) { 
      output[i] = output[i] + B_[i]; 
     } 
    } 

    return atoi(output.c_str()); 
} 
+1

Für einen einfachen Test nur eingestellt 'A_' eine längere Zeichenfolge als' B_' und Schritt durch den Code und zu sehen zu sein, was passiert. Hinweis: Achten Sie auf den Zustand der for-Schleife. – NathanOliver

+1

Warum haben Sie dieses C markiert, wenn es sich um eine C++ - Zuweisung handelt? Was ist IntToString? Und was macht es? –

+0

Ihr erster Test kann um ein Drittel verlängert werden, wenn: 'if (100000000 Ped7g

Antwort

1

Sie for Schleifen stoppt nur, wenn i die Größe der größten Saite erreicht. Aber Sie verwenden weiterhin i als Index in beide Strings. Sie überschreiten also die Grenzen des kürzeren Bereichs und verursachen einen Fehler.

Statt:

if (A_[i]) 

Sie wollen wahrscheinlich:

if (i < A_.size()) 
0

Ihr Algorithmus Logik falsch ist.

Sie können unter string nicht tun und erwarten, dass es wahr ist, wenn i gültiger Index ist. Es wird beim ungültigen Index abstürzen.

Versuchen Sie zuerst die Logik (auf Papier oder in den Kommentaren) auf unterschiedliche Weise, mit Index und String-Größen neu zu schreiben, wenn Sie nächsten gültige Zeichen in A oder B.

Danach fügt restlichen Teil haben, um zu sehen längere Zeichenfolge (falls eine übrig ist).

output Die Zeichenfolge muss möglicherweise auf eine ausreichende Kapazität eingestellt werden, bevor Sie output[i] verwenden. Wie string output(A_.size()+B_.size(), '?');.


Sie sind dringend aufgefordert, zu lernen, wie Debugger zu verwenden, das Ihnen erlaubt, alle unerwarteten Verhalten des Codes auf Ihren eigenen Augen zu erkennen, so müssen nicht erraten, was Ihr Fehler ist.

Denken Sie daran, die Computer sind ziemlich streng deterministische Maschinen, dh. Was immer du ihnen sagst, sie werden es tun. Genau. Wenn Sie also mit einer solchen einfachen Quelle arbeiten, wo Sie eine stabile Ausführungsumgebung haben und den Prozess jedes Mal wiederholen können, ist es einfach zu sehen, was Sie wirklich geschrieben haben und den Computer auszuführen und mit Ihrer ursprünglichen Absicht zu vergleichen.

3

Lösung in Java

public long calculateDecimalZip(long a, long b) { 
    if ((a < 0 || a > 100000000) || ((b < 0 || b > 100000000))) { 
     return -1; 
    } 
    char[] arrayFirstNumber = String.valueOf(a).toCharArray(); 
    char[] arraySecondNumber = String.valueOf(b).toCharArray(); 
    String aux = ""; 
    for (int i = 0; i < arrayFirstNumber.length || i < arraySecondNumber.length; i++) { 
     if (i < arrayFirstNumber.length) { 
      aux += arrayFirstNumber[i]; 
     } 
     if (i < arraySecondNumber.length) { 
      aux += arraySecondNumber[i]; 
     } 
    } 
    result = Long.parseLong(aux); 
    if (result > 100000000) { 
     return -1; 
    } 
    return result; 

} 

Ich hoffe Hilfe jemand.

0

In Javascript

function solution(A, B) { 
    if (A < 0 || A > 100000000) return -1; 
    if (B < 0 || B > 100000000) return -1; 

    A = A.toString(); 
    B = B.toString(); 

    var C = ''; 

    for(var i = 0; i < A.length || i < B.length; i++){ 
     if (A[i]) { 
      C += A[i]; 
     }   
     if (B[i]) { 
      C += B[i]; 
     } 
    } 

    return parseInt(C);  
} 
+0

Die Frage bezog sich nicht auf 'JavaScript', diese Antwort ist nicht wirklich relevant. – David

0
public int DecimalZipOfTwoIntegers() 
    { 
     StringBuilder result = new StringBuilder(); 
     var a = 34587; 
     var b = 5630; 

     if (a <= 0) return b; 
     if (b <= 0) result a; 

     int index = 0; 
     var bLength= b.ToString().Length; 

     foreach (var aDigit in a.ToString()) 
     { 
      index++; 
      result.Append(aDigit); 

      if (bLength >= index) 
       result.Append(b.ToString()[index-1]); 
     } 

     for (var bRemIndex = index + 1; bRemIndex <= bLength; bRemIndex++) 
      result.Append(b.ToString()[bRemIndex - 1]); 

     return Int32.Parse(result.ToString()); 
    } 
+0

Während dieses Code-Snippet die Lösung sein kann, [hilft eine Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, um die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – peacetype

Verwandte Themen