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
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.
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.
#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] - '0')%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]-'0'))%a; vector<int> mod_b(n+1, 0); mod_b[n-1] = (str[n-1] - '0')%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]-'0')*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; }
YES 12 3
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 .
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!