[JAVA] Un programme qui calcule la puissance de 2 à 100

introduction

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.

programme

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

Description du programme

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.

Aperçu du 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.

① Préparez un tableau

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 ⑥.

② Initialisez les valeurs du tableau

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.

③ Traitement réel

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é.)

④ Faites une copie du tableau

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 ⑥.

⑤ Préparation des variables nécessaires pour mettre à jour la réponse de l'étage

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.

⑥ Trouvez la valeur du chiffre d'intérêt

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.

⑦ Préparez une variable qui enregistre le report à utiliser dans la boucle suivante.

Puisque la somme est obtenue à ce stade, utilisez cette valeur pour préparer une variable qui stocke la retenue à utiliser dans la boucle suivante.

⑧ Afficher le résultat du calcul

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.

Résumé

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.

Recommended Posts

Un programme qui calcule la puissance de 2 à 100
Pour écrire un programme orienté utilisateur (1)
[ruby] Création d'un programme qui ne répond qu'à des conditions spécifiques
J'ai essayé de générer une source de programme en langage C à partir de cURL
[Introduction à Java] Comment écrire un programme Java
Une histoire qui a mis du temps à établir une connexion
Pour devenir programmeur VB.net depuis une boutique Java
Comment créer une classe qui hérite des informations de classe
[Mis à jour de temps à autre] Liens endettés
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
3. Créez une base de données à laquelle accéder à partir du module Web
Comment passer d'Eclipse Java à un fichier SQL
Comment déployer à partir d'une image Docker locale vers Heroku
[Ruby] Un programme / concept qui combine each_with_index et recherche
Comment lancer une autre commande dans un programme Ruby
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
J'ai créé un Wrapper qui appelle KNP depuis Java
Expression régulière Ruby Extrait d'une chaîne de caractères spécifique vers une chaîne de caractères
Appeler un programme écrit en Swift depuis Processing (Java)
Un programme qui génère des nombres supérieurs ou inférieurs à l'entier d'entrée à partir d'un tableau de 50 éléments
Créer un programme de menu
Un mémo du programme que vous pouvez réaliser que la probabilité de lancer des dés est d'environ 1/6
De Java à Ruby !!
Un programme qui recherche une chaîne de caractères, et lorsque la chaîne de caractères de recherche est trouvée, affiche la chaîne de caractères du début de la ligne juste avant la chaîne de caractères de recherche.
Générer une collection unique de valeurs à partir d'une collection qui contient des valeurs en double
Comment créer un formulaire pour sélectionner une date dans le calendrier
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Créez une méthode qui peut récupérer des caractères à partir de n'importe quel emplacement
Comment graver un disque d'installation de Windows à partir d'Ubuntu
Rechercher une instruction Switch qui peut être convertie en une expression Switch
Un programme qui compte le nombre de mots dans une liste
Convertir un tableau potentiellement nul en flux
Créez une source de données (pool de connexions) qui se connecte de WLS (RAID) à la base de données autonome (ATP / ADW).
Comment déboguer à distance un programme javaFX exécuté par Raspeye à partir de Windows 10 - De la construction de l'environnement à l'exécution du débogage ①-
Comment déboguer à distance un programme javaFX exécuté par Raspeye de la construction de l'environnement Windows 10 à l'exécution du débogage (2) -
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans