Maison > développement back-end > C++ > le corps du texte

Traduisez ce qui suit en chinois : C++ Divisez un nombre en deux parties divisibles

PHPz
Libérer: 2023-08-30 17:33:03
avant
1092 Les gens l'ont consulté

将以下内容翻译为中文:C++ 将一个数分成两个可被整除的部分

Dans cette question, on nous donne une chaîne qui peut être interprétée comme un nombre. Nous devons maintenant diviser cette chaîne en deux parties de telle sorte que la première partie soit divisible par A et la deuxième partie soit divisible par B (étant donné nos deux entiers). Par exemple -

Input : str = "123", a = 12, b = 3
Output : YES
12 3
"12" is divisible by a and "3" is
divisible by b.

Input : str = "1200", a = 4, b = 3
Output : YES
12 00

Input : str = "125", a = 12, b = 3
Output : NO
Copier après la connexion

Maintenant, dans ce problème, nous allons effectuer des pré-calculs pour rendre notre programme plus rapide et il pourra ensuite fonctionner sous des contraintes plus élevées.

Méthode pour trouver la solution

Dans cette méthode, nous allons exécuter deux boucles dans la chaîne, la première boucle du début à la fin et la deuxième boucle de la fin au début. Maintenant, en chaque point, on prend modulo l’entier formé par a dans la première boucle et b dans la deuxième boucle, et on peut alors trouver la réponse.

Exemple

#include <bits/stdc++.h>
using namespace std;
void divisionOfString(string &str, int a, int b){
    int n = str.length();
    vector<int> mod_a(n+1, 0); //
    mod_a[0] = (str[0] - &#39;0&#39;)%a;
    for (int i=1; i<n; i++) // front loop for calculating the mod of integer with a
        mod_a[i] = ((mod_a[i-1]*10)%a + (str[i]-&#39;0&#39;))%a;
    vector<int> mod_b(n+1, 0);
    mod_b[n-1] = (str[n-1] - &#39;0&#39;)%b;
    int power10 = 10; // as we have assigned answer to last index
    for (int i= n-2; i>=0; i--){ // end loop for calculating the mod of integer with b
        mod_b[i] = (mod_b[i+1] + (str[i]-&#39;0&#39;)*power10)%b;
        power10 = (power10 * 10) % b;
    }
    for (int i=0; i<n-1; i++){ // finding the division point
        if (mod_a[i] != 0) // we can skip through all the positions where mod_a is not zero
            continue;
        if (mod_b[i+1] == 0){ // now if the next index of mod_b is also zero so that is our division point
            cout << "YES\n";
            /*******Printing the partitions formed**********/
            for (int k=0; k<=i; k++)
               cout << str[k];
            cout << " ";
            for (int k=i+1; k < n; k++)
               cout << str[k];
            return;
        }
    }
    cout << "NO\n"; // else we print NO
}
// Driver code
int main(){
    string str = "123"; // given string
    int a = 12, b = 3;
    divisionOfString(str, a, b);
    return 0;
}
Copier après la connexion

Sortie

YES
12 3
Copier après la connexion

Explication du code ci-dessus

Dans cette méthode, on calcule maintenant le reste du nombre formé par chaque division. Notre premier nombre doit être divisible par a, nous exécutons donc une boucle avant et stockons le mod de ce nombre avec a. Pour b, nous exécutons une boucle arrière et stockons le mod maintenant car nous savons que si le mod de an à n'importe quelle position est nul et que le mod de b à l'index suivant est nul, ce sera notre réponse, donc nous l'imprimons .

Conclusion

Dans ce tutoriel, nous avons résolu un problème de division d'un nombre en deux parties divisibles. Nous avons également appris le programme C++ pour ce problème et la méthode complète (générique) pour le résoudre. Nous pouvons écrire le même programme dans d'autres langages tels que C, Java, Python et d'autres langages. Nous espérons que vous avez trouvé ce tutoriel utile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!