Konvertieren einer Ganzzahl in ein Array von Ziffern [closed]

Lesezeit: 3 Minuten

Ich muss zwei ganze Zahlen in zwei Arrays von Ziffern umwandeln, also würde zum Beispiel 544 werden arr[0] = 5, arr[1] = 4, arr[2] = 4.

Ich habe einige Algorithmen gefunden, die dies tun, aber sie erstellen ein neues Array und geben dieses zurück. Ich müsste diesen Speicher für zwei Arrays zuweisen, also möchte ich zwei Ganzzahlen als Referenz übergeben und dies direkt für sie tun.

Ich denke, ich kann das tun, weil diese Integer tatsächlich Vorlagentypen sind, also sollten sie veränderbar sein. Deshalb habe ich hier das C++-Tag hinzugefügt.

  • Was verwendest du, C oder C++?

    – James McLaughlin

    13. April 2013 um 12:18 Uhr

  • “in zwei Arrays von Ziffern, also zum Beispiel” – In Ihrem Beispiel gibt es nur ein Array. Und hast du eine Frage?

    – Jim Balter

    13. April 2013 um 12:19 Uhr

  • Sie müssen etwas über die Modulo-Division (“Rest”) lernen %. Sie hätten es schneller kodieren können, als Sie gebraucht hätten, um die Frage zu stellen.

    – Heiße Licks

    13. April 2013 um 12:20 Uhr

Benutzer-Avatar
Mario

Verwenden Sie einfach so etwas:

int n = 544; // your number (this value will Change so you might want a copy)
int i = 0; // the array index
char a[256]; // the array

while (n) { // loop till there's nothing left
    a[i++] = n % 10; // assign the last digit
    n /= 10; // "right shift" the number
}

Beachten Sie, dass dies dazu führt, dass die Zahlen in umgekehrter Reihenfolge zurückgegeben werden. Dies kann leicht geändert werden, indem der Anfangswert von geändert wird i sowie das Inkrement/Dekrement, je nachdem, wie Sie die Länge des Werts bestimmen möchten.


(Brett Hale) Ich hoffe, der Poster hat nichts dagegen, aber ich dachte, ich würde ein Code-Snippet hinzufügen, das ich für diesen Fall verwende, da es nicht einfach ist, die Anzahl der Dezimalstellen vor der Konvertierung korrekt zu bestimmen:

{
    char *df = a, *dr = a + i - 1;
    int j = i >> 1;

    while (j--)
    {
        char di = *df, dj = *dr;
        *df++ = dj, *dr-- = di; /* (exchange) */
    }
}

  • Wenn Sie echte Charaktere wollen, dann a[i++] = n % 10 geändert werden soll a[i++] = '0' + (n % 10)

    – Josef König

    13. April 2013 um 13:58 Uhr


Benutzer-Avatar
masud

Eine einfache Lösung ist:

int i = 12312278;

std::vector<int> digits;

while (i)
{
    digits.push_back(i % 10);

    i /= 10;
}

std::reverse(digits.begin(), digits.end());

oder stringbasiert ( i >= 0 )

for (auto x : to_string(i))
    digits.push_back(x-'0');

  • Nette Idee. Obwohl dies nicht funktionieren wird c. Nicht sicher, warum die Frage markiert ist c ebenso gut wie c++.

    – Mario

    13. April 2013 um 12:21 Uhr

Rufen Sie die Ganzzahl auf a.

Um die Einerstelle von zu erhalten a, a % 10

Verschieben a nach unten, also ist die Zehnerstelle die Einerstelle, a / 10

Um zu wissen, wann du fertig bist, a == 0

Um zu wissen, wie groß Ihr Array überhaupt sein muss, min(ceil(log(a+1, 10)), 1) (Um sich davon zu überzeugen, dass das funktioniert, versuchen Sie den logarithmischen Teil davon in einem Taschenrechner. Wenn Sie kein Protokoll mit mehreren Argumenten haben, verwenden Sie die Identität log(x,y) == log(x)/log(y))

  • Oft ist es einfacher, einfach wiederholt durch 10 zu dividieren, um die Länge des Ergebnisses im Voraus zu bestimmen. Wahrscheinlich nicht viel weniger effizient als die Verwendung von Protokoll und einfacher zu verstehen/zu validieren.

    – Heiße Licks

    13. April 2013 um 12:24 Uhr

  • @Hot Licks Oder du könntest einfach benutzen vector<int> für alles und müssen sich nie wieder darüber ärgern, ob Ihr Array die richtige Länge hat oder nicht 🙂

    – Patashu

    13. April 2013 um 12:24 Uhr

Benutzer-Avatar
Johnny Mnemonik

Sie können so etwas tun, wenn Sie C++ verwenden:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main() 
{

    int a=544;
    stringstream str;
    str << a;
    string arr;
    str>>arr;
    for(int i=0; i<arr.length(); i++)
    {
        cout << arr[i];
    }
    system("pause");
    return 0; 
}

1012560cookie-checkKonvertieren einer Ganzzahl in ein Array von Ziffern [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy