Vor kurzem hatte ich in einer Vorlesung zum Programmieren an einer Universität die Aufgabe, ein "Programm zu erstellen, das den Multiplikator von 2 auf 100 berechnet", aber es war ziemlich schwierig, deshalb möchte ich das Programm als Memorandum für mich selbst verlassen.
Aktualisiert am 09.01.2019 (Aktualisierter Inhalt: Kommentar hinzufügen)
public class Report5_2_30114020{
public static void main(String[] args) {
//①
int [] answerArray = new int [200]; //Ein Array, in dem das Berechnungsergebnis des Produkts gespeichert wird
int [] copyArray = new int [200]; //Ein Array, das den Inhalt des Arrays vorübergehend kopiert
//②
//Array-Werte initialisieren
for(int i=0; i<answerArray.length; i++){
answerArray[i] = 0;
}
answerArray[0] = 1;
//③
for(int i=2; i<=100; i++){
//④
//Kopieren Sie das Array
for(int j=0; j<answerArray.length; j++){
copyArray[j] = answerArray[j];
}
//⑤
//Berechnung
int upNumber1 = 0;
int upNumber2 = 0;
int first = 0;
int second = 0;
int third = 0;
if(i<10){
first = i;
}else if(i<100){
first = i%10;
second = i/10;
}else{
third = 1;
}
//⑥
for(int j=0; j<answerArray.length; j++){
int firstPlus = 0;
int secondPlus = 0;
int thirdPlus = 0;
firstPlus = first * copyArray[j];
if(j-1>=0){
secondPlus = second * copyArray[j-1];
}
if(j-2>=0){
thirdPlus = third * copyArray[j-2];
}
int sum = firstPlus + secondPlus + thirdPlus + upNumber1;
answerArray[j] = sum % 10;
//⑦
//Vorbereitung zum Tragen
if(sum <10){
upNumber1 = upNumber2;
upNumber2 = 0;
}else if(sum < 100){
upNumber1 = upNumber2 + (sum)/10;
upNumber2 = 0;
}else{
upNumber1 = upNumber2 + ((sum)/10)%10;
upNumber2 = (sum)/100;
}
}
//⑧
//Ergebnisse anzeigen
int counter = 0;
for(int j=0; j<answerArray.length; j++){
if(answerArray[answerArray.length-1-j] != 0){
break;
}
counter++;
}
System.out.print(i + "Bodenbelag:");
for(int j=0; j<answerArray.length; j++){
if(j<counter){
continue;
}
System.out.print(answerArray[answerArray.length-1-j]);
}
System.out.println();
}
}
}
Aktualisiert am 09.01.2019 (Aktualisierter Inhalt: "Programmbeschreibung" hinzugefügt) Eingekreiste Zahlen (wie z. B. ①) entsprechen den im Programm geschriebenen eingekreisten Zahlen.
Dieses Programm berechnet vom 2. bis zum 100. Stock. Da ein normaler int-Typ keine große Anzahl von 100. Potenzen (158 Stellen) speichern kann, wird das Berechnungsergebnis der 100. Potenz jeweils eine Ziffer in einem Array vom int-Typ mit einer ausreichend großen Anzahl von Elementen berechnet. Die grundlegende Richtlinie besteht darin, sie zu speichern. Zu diesem Zeitpunkt tritt eine Verschleppung usw. auf, so dass die Verarbeitung etwas kompliziert sein wird.
Ein Array, in dem das Berechnungsergebnis des Produkts gespeichert wird. Da das Ergebnis der Multiplikation in den Elementen des Arrays Ziffer für Ziffer gespeichert wird, ist es erforderlich, ein Array mit einer größeren Anzahl von Elementen vorzubereiten, wenn man bedenkt, dass 100! 158 Stellen sind. copyArray ist erforderlich, wenn die Berechnung in ⑥ durchgeführt wird.
answerArray [n] entspricht der n + 1-ten Ziffer des Berechnungsergebnisses des Produkts. Da wir das anfängliche Berechnungsergebnis auf 1 setzen möchten, wird nur das erste Element auf 1 und die anderen Elemente zur Initialisierung auf 0 gesetzt.
Diese for-Anweisung ist der äußerste Prozess. Die Variable i, die in dieser for-Anweisung gültig ist, entspricht der zu diesem Zeitpunkt berechneten Skalennummer. (Beispiel: In der Schleife von i = 10 wird i! Berechnet.)
Jedes Mal, wenn i aktualisiert wird und Schleifen erstellt werden, wird das Ergebnis der sofort berechneten Skala kopiert. (In ④ der Schleife von i = 10 bedeutet dies, dass 9! Berechnet kurz vor dem Kopieren.) Dieses kopierte Array wird später in ⑥ verwendet.
Die Variable upNumber1 ist eine Variable, die die von einer Ziffer getragene Nummer speichert. Die Variable upNumber2 ist eine Variable, die die zweistellige Nummer speichert. Die erste ist die erste Ziffer des i-Werts, die zweite die zweite Ziffer des i-Werts und die dritte die dritte Ziffer des i-Werts. Danach wird das Produkt der Berechnungsergebnisse bis zum letzten Mal für jedes der ersten, zweiten und dritten berechnet.
Fügen Sie das Produkt der Werte von first und copyArray [j] in eine neue Variable mit dem Namen firstPlus ein. Fügen Sie den Wert des Produkts von second und copyArray [j-1] in eine neue Variable namens secondPlus ein. Fügen Sie den Wert des Produkts von Third und CopyArray [j-2] in eine neue Variable namens ThirdPlus ein. Hier ist der Index j für den ersten, aber j-1 und j-2 unterscheiden sich für den zweiten und dritten. Zweitens und drittens sind die Zahlen und Hunderte, die die Zehnerstelle der Variablen i darstellen. Weil es die dargestellte Zahl ist. Ich denke, es wird einfacher sein, diesen Bereich zu verstehen, wenn Sie sich die Multiplikation einer mehrstelligen Zahl und einer dreistelligen Zahl vorstellen. Der Grund für die Verwendung der if-Anweisung bei der Ausgabe von secondPlus und ThirdPlus besteht darin, zu vermeiden, auf Indizes zu verweisen, die kein Array haben. Die variable Summe ist die Summe der Werte von firstPlus, secondPlus, ThirdPlus und des Übertrags, der in der vorherigen Schleife aufgetreten ist. Da die erste Ziffer davon der Wert der j + 1. Ziffer von i! Ist, wird der Rest der Summe geteilt durch 10 answerArray zugewiesen.
Da zu diesem Zeitpunkt die Summe erhalten wird, verwenden Sie diesen Wert, um eine Variable vorzubereiten, in der der Übertrag gespeichert wird, der in der nächsten Schleife verwendet werden soll.
Das Berechnungsergebnis (i!) Wird zu diesem Zeitpunkt angezeigt. Zählen Sie im Variablenzähler die Anzahl der leeren () Arrays. Als nächstes werden die im Array gespeicherten Zahlen der Reihe nach angezeigt. Durch Anzeige desjenigen mit dem größten Index kann der numerische Wert von i! Ausgegeben werden. Zu diesem Zeitpunkt ist es möglich zu verhindern, dass die unnötige 0 zu Beginn angezeigt wird, indem die Verarbeitung für die Anzahl der zuvor erhaltenen Zähler durchlaufen wird.
Ich habe lange gebraucht, um zum ersten Mal seit langer Zeit ein Programm zu schreiben. Meine persönliche Sucht war, dass ich nicht wusste, dass es unbedingt notwendig war, eine Kopie der Sequenz auf meine eigene Weise zu erstellen. Ich möchte einen Kommentar veröffentlichen, wenn ich in naher Zukunft Lust dazu habe.
Recommended Posts