Récemment, lors d'une conférence de programmation universitaire, on m'a confié la tâche de créer un «programme qui calcule le multiplicateur de 2 à 100», mais c'était assez difficile, alors je voudrais laisser le programme comme mémoire pour moi-même.
Mis à jour le 09/01/2019 (Contenu mis à jour: Ajouter un commentaire)
public class Report5_2_30114020{
public static void main(String[] args) {
//①
int [] answerArray = new int [200]; //Un tableau qui stocke le résultat du calcul du produit
int [] copyArray = new int [200]; //Un tableau qui copie temporairement le contenu du tableau
//②
//Initialiser les valeurs du tableau
for(int i=0; i<answerArray.length; i++){
answerArray[i] = 0;
}
answerArray[0] = 1;
//③
for(int i=2; i<=100; i++){
//④
//Copiez le tableau
for(int j=0; j<answerArray.length; j++){
copyArray[j] = answerArray[j];
}
//⑤
//Calcul
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;
//⑦
//Se préparer au transport
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;
}
}
//⑧
//Voir les résultats
int counter = 0;
for(int j=0; j<answerArray.length; j++){
if(answerArray[answerArray.length-1-j] != 0){
break;
}
counter++;
}
System.out.print(i + "Sol:");
for(int j=0; j<answerArray.length; j++){
if(j<counter){
continue;
}
System.out.print(answerArray[answerArray.length-1-j]);
}
System.out.println();
}
}
}
Mise à jour le 09/01/2019 (Contenu mis à jour: "Description du programme" ajoutée) Les nombres encerclés (tels que ①) correspondent aux nombres encerclés écrits dans le programme.
Ce programme est un programme qui calcule du 2e étage au 100e étage. Puisqu'un type int normal ne peut pas stocker un grand nombre de 100e puissance (158 chiffres), le résultat du calcul de la 100e puissance est calculé un chiffre à la fois dans un tableau de type int avec un nombre suffisamment grand d'éléments. La politique de base est de le stocker. À ce moment-là, des reports, etc.
Un tableau qui stocke le résultat du calcul du produit. Puisque le résultat de la multiplication est enregistré dans les éléments du tableau un chiffre à la fois, il est nécessaire de préparer un tableau avec un plus grand nombre d'éléments, en considérant que 100! Équivaut à 158 chiffres. copyArray est requis lors de l'exécution du calcul dans ⑥.
answerArray [n] correspond au n + 1ème chiffre du résultat du calcul du produit. Puisque nous voulons définir le résultat du calcul initial sur 1, seul le premier élément est défini sur 1 et les autres éléments sur 0 pour l'initialisation.
Cette déclaration est le processus le plus extérieur. La variable i qui est valide dans cette instruction for correspond au numéro d'échelle qui est calculé à ce moment-là. (Exemple: dans la boucle de i = 10, i! Est calculé.)
Chaque fois que i est mis à jour et boucle, il copie le résultat de l'échelle immédiatement calculée. (Dans ④ de la boucle de i = 10, cela signifie que 9! Calculé juste avant est copié.) Ce tableau copié sera utilisé plus tard dans ⑥.
La variable upNumber1 est une variable qui stocke le nombre porté par un chiffre. La variable upNumber2 est une variable qui stocke le nombre porté par deux chiffres. le premier est le premier chiffre de la valeur i, le second est le deuxième chiffre de la valeur i et le troisième est le troisième chiffre de la valeur i. Après cela, le produit des résultats du calcul jusqu'à la dernière fois est calculé pour chacun des premier, deuxième et troisième.
Mettez le produit des valeurs de first et copyArray [j] dans une nouvelle variable appelée firstPlus. Mettez la valeur du produit de second et copyArray [j-1] dans une nouvelle variable appelée secondPlus. Mettez la valeur du produit de third et copyArray [j-2] dans une nouvelle variable appelée thirdPlus. Ici, l'indice est j pour le premier, mais j-1 et j-2 pour le deuxième et le troisième sont différents l'un de l'autre. Parce que c'est le nombre représenté. Je pense qu'il sera plus facile de comprendre ce domaine si vous imaginez la multiplication d'un nombre à plusieurs chiffres et d'un nombre à 3 chiffres. La raison de l'utilisation de l'instruction if dans le processus d'émission de secondPlus et ThirdPlus est d'éviter de référencer des index qui n'ont pas de tableau. La somme des variables est la somme des valeurs de firstPlus, secondPlus, thirdPlus et du report survenu dans la boucle précédente. Puisque le premier chiffre de ceci est la valeur du j + 1ème chiffre de i!, Le reste de la somme divisée par 10 est affecté à answerArray.
Puisque la somme est obtenue à ce stade, utilisez cette valeur pour préparer une variable qui stocke la retenue à utiliser dans la boucle suivante.
Le résultat du calcul (i!) À ce moment-là est affiché. Dans le compteur de variables, comptez le nombre de tableaux vides (). Ensuite, les nombres stockés dans le tableau sont affichés dans l'ordre, un chiffre à la fois. En affichant à partir de celui avec le plus grand index, la valeur numérique de i! Peut être sortie. À ce stade, vous pouvez empêcher l'affichage du 0 inutile au début en passant par le traitement pour le nombre de compteurs obtenu auparavant.
Il m'a fallu beaucoup de temps pour écrire un programme pour la première fois depuis longtemps. Ma dépendance personnelle était que je n'avais pas réalisé qu'il était impératif de faire une copie de la séquence à ma manière. J'aimerais publier un commentaire si j'en ai envie dans un proche avenir.