fonction change un integer 123 en 321... help

fonction change un integer 123 en 321... help - C++ - Programmation

Marsh Posté le 18-01-2003 à 01:12:22    

ou sino comment iverser nombre sans utilser string ??
ex : 2365  --> 5632
c pour un prog qui calcul les nombres palindrome, et leur coef.
 
un autre problem, je ne voie pas trop comment garder tou les chiffres d un tres tes gros entier lors de calculs ..  :cry:  
help please.
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. void inverse(string b) {
  5. string save = b;
  6. long inverse;
  7. for(int i=0;i<(b.length());i++) {
  8. save[(b.length())-i-1] = b[i]; }
  9. cout << save <<"\n";  }
  10. int main() {
  11. string quit;
  12. long a;
  13. string b;
  14. do {
  15. cout << "enter an integer number\n";
  16. cin >>b;
  17. inverse(b);
  18. cout << "do u want to quit ?\n";
  19. cin >>quit;}
  20. while(quit!="y" );
  21. }


Message édité par COULIX le 20-01-2003 à 02:53:50
Reply

Marsh Posté le 18-01-2003 à 01:12:22   

Reply

Marsh Posté le 18-01-2003 à 06:07:55    

COULIX a écrit :

ou sino comment iverser nombre sans utilser string ??
ex : 2365  --> 5632
c pour un prog qui calcul les nombres palindrome, et leur coef.
 
un autre problem, je ne voie pas trop comment garder tou les chiffres d un tres tes gros entier lors de calculs ..  :cry:  
help please.
 


atoi() et itoa() ça devrait t'aider.
Pour les grand nombres, trouve un package de classes toutes faites, c'est une oeuvre titanesque (un de mes profs a fait sa thèse, 3 ans de sa vie, sur la division).

Reply

Marsh Posté le 19-01-2003 à 10:54:59    

je préferais une solution à base de stringstream
 
surtout que itoa est loin d'etre standard, et que atoi c'est du C


Message édité par Taz le 19-01-2003 à 10:56:06
Reply

Marsh Posté le 20-01-2003 à 02:21:28    

nraynaud a écrit :


atoi() et itoa() ça devrait t'aider.
Pour les grand nombres, trouve un package de classes toutes faites, c'est une oeuvre titanesque (un de mes profs a fait sa thèse, 3 ans de sa vie, sur la division).


  :p  
je trouve ca un peu stupide notre dernier assignement (premier semestre de c++)
 
faire un programme qui calcul le palindrome de tout entier et donn ele coef.
exemple.
tu rentre 17 ---> il fait 17+71 = 88 hop palindrome degre 1.  
le problem c qu apres une recheche sur le sujet, des nombres sont carrement trop grand, genre 196 a 14 millions de chiffrre toujours pas de plaindroe.
donc ou est l interet de nous faire un programme qui est limiter, vu nos conaissance.
 
bon je vais quand meme essaer de fair quelqeu chose d ebien avec le palindrome + coef en fsteam dans un fichier en output.
et peut rtete que j eparviendrai a trouver le fameux palindrone de 196  :D  :D .
 

Reply

Marsh Posté le 20-01-2003 à 02:22:25    

++Taz a écrit :

je préferais une solution à base de stringstream
 
surtout que itoa est loin d'etre standard, et que atoi c'est du C


je vais voir sa, apres une recherche de "stringtream " sur google  :whistle:

Reply

Marsh Posté le 20-01-2003 à 02:35:58    

sa marche pas
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. void inverse(string b) {
  5. string save = b;
  6. long inverse;
  7. for(int i=0;i<(b.length());i++) {
  8. save[(b.length())-i-1] = b[i]; }
  9. cout << save <<"\n";
  10. save=atoi(inverse);  // pourquoi ? sa marches pas
  11. }
  12. int main() {
  13. string quit;
  14. long a;
  15. string b;
  16. do {
  17. cout << "enter an integer number\n";
  18. cin >>b;
  19. inverse(b);
  20. cout << "do u want to quit ?\n";
  21. cin >>quit;}
  22. while(quit!="y" );
  23. }

Reply

Marsh Posté le 20-01-2003 à 04:46:14    

COULIX a écrit :

sa marche pas
 

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. void inverse(string b) {
  5. string save = b;
  6. long inverse;
  7. for(int i=0;i<(b.length());i++) {
  8. save[(b.length())-i-1] = b[i]; }
  9. cout << save <<"\n";
  10. save=atoi(inverse);  // pourquoi ? sa marches pas
  11. }
  12. int main() {
  13. string quit;
  14. long a;
  15. string b;
  16. do {
  17. cout << "enter an integer number\n";
  18. cin >>b;
  19. inverse(b);
  20. cout << "do u want to quit ?\n";
  21. cin >>quit;}
  22. while(quit!="y" );
  23. }




 
heu je suis pas sur, mais déjà ta variable "inverse" a le même nom que ta fonction.  
atoi() veut dire ascii to integer donc au minimum c'est itoa qu'il faut que tu utilises ici, mais comme ça renvoie une chaine C (un char *) et pas une string, il doit y avoir une connerie genre conversion implicite mais utilise au minimum une conversion explicite genre string(itoa(nombre)).
Mais il t'a été proposé un truc un peu plus C++ que itoa et atoi plus haut.  
 
Et puis donne les messages d'erreur quand ça marche pas !

Reply

Marsh Posté le 20-01-2003 à 06:14:36    

bon jai converti mes string en char [100], sa marche avec

Code :
  1. u = atoi(save);


le probleme des que mon entier depasse 12 chiffre le resultat est merdeux..... :cry:

Reply

Marsh Posté le 20-01-2003 à 08:05:41    

puisque vous voulez pas utilisez les stringstream, gardez au moins les std::sting
 
 
pour atoi:
 
int i= atoi(str.c_str());
 
le prototype  
const char * std::string::c_str() const;

Reply

Marsh Posté le 21-01-2003 à 06:22:02    

COULIX a écrit :

bon jai converti mes string en char [100], sa marche avec

Code :
  1. u = atoi(save);


le probleme des que mon entier depasse 12 chiffre le resultat est merdeux..... :cry:  


 
Heu d'après ma calculette c'est à 10 chiffres que ça coupe.
 
Il te faut un package bigInteger, tu pourras pas manipulet des nombres aussi grands sinon, ou alors garde des chaines de caractères (et de type string, pas char *) de bout en bout. Je ne sais pas ce que c'est que ce coefficient qu tu calcules mais s'il ne nécessite pas de faire d'opération arithmétique impliquant tout le nombre, garde des caractères de bout en bout.
 

Reply

Marsh Posté le 21-01-2003 à 06:22:02   

Reply

Marsh Posté le 21-01-2003 à 10:46:47    

nraynaud a écrit :


 
Heu d'après ma calculette c'est à 10 chiffres que ça coupe.
 
Il te faut un package bigInteger, tu pourras pas manipulet des nombres aussi grands sinon, ou alors garde des chaines de caractères (et de type string, pas char *) de bout en bout. Je ne sais pas ce que c'est que ce coefficient qu tu calcules mais s'il ne nécessite pas de faire d'opération arithmétique impliquant tout le nombre, garde des caractères de bout en bout.
 
 


 
ca marche avec des strings =)
j ai p.\lus qu a y mettre une boucle et roulaize...

Code :
  1. #include <iostream.h>
  2. #include <string.h>
  3. #include <string>
  4. #include <cstring>
  5. #include <cstdlib>
  6. bool palindrome (string a) {
  7. int len= a.length();
  8. for(int i=0; i<len;i++){
  9. if((a[i]*1)!=(a[len-i-1]*1)) { return false; }
  10. else continue;
  11. }
  12. return true;
  13. }
  14. string inversestr (string source,string target) {
  15.        for(int i=0; i<(source.length());i++){
  16.        target[i]=source[(source.length())-i-1]; }
  17.        return target;
  18. }
  19. int main()
  20. {
  21. string a,inverse,resultf;
  22. char quit;
  23. int tempa,tempinverse,tempresult;
  24. do {
  25. int temp=0;
  26. cout << "Enter number  :\n";
  27. cin>>a;
  28. inverse=a;
  29. string result((a.length()),' ');
  30. resultf=result;
  31. inverse=inversestr(a,inverse);
  32. cout << inverse << "\n";
  33. for(int i=0; i<(a.length());i++)   {
  34. tempa = (a[i]*1 -48);
  35. tempinverse = (inverse[i]*1 -48);
  36. if (tempa+tempinverse+temp >9) {
  37.      tempresult= (tempa+tempinverse+temp)%10;
  38.      temp = 1;
  39.      result[i]=(tempresult+48);
  40. }
  41. else {
  42.      tempresult = (tempa+tempinverse+temp);
  43.      result[i]=(tempresult+48);
  44. }
  45. }
  46. if (temp==1){
  47. result = result + '1';
  48. resultf = resultf + ' ';
  49. }
  50. cout << endl;
  51. resultf =inversestr(result,resultf);
  52. cout << "result          : " <<resultf << "\n";
  53. if (palindrome(resultf)==true) { cout << "palindrome \n"; }
  54. else cout <<"Non palindrome \n";
  55. cout << "quit ? \n" << "\n";
  56. cin >> quit;
  57. }
  58. while (quit != 'y');
  59. }


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed