17 iul. 2012

Numarul de cifre

Sa numaram cate cifre de fiecare grad sunt intr-un numar. Cate cifre de 1, cate de 2 s.a.m.d. Varianta este de forta bruta, ar terbui folosit un vector unidimensional de lungime 10.

#include <iostream>
using namespace std;

int main() {

 int n;
 int c;
 //initializam numerul de cifre
 int i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0,
   i9 = 0;
 //citim n
 cin >> n;

 // numaram cifrele
 while (n) {
  c = n % 10;
  n = n / 10;
  switch (c) {
  case 0:
   i0++;
   break;
  case 1:
   i1++;
   break;
  case 2:
   i2++;
   break;
  case 3:
   i3++;
   break;
  case 4:
   i4++;
   break;
  case 5:
   i5++;
   break;
  case 6:
   i6++;
   break;
  case 7:
   i7++;
   break;
  case 8:
   i8++;
   break;
  case 9:
   i9++;
   break;
  }
 }
 //afizam cifrele
 cout << "Numarul are: \n";
 cout << "[" << i0 << "]" << " de 0\n";
 cout << "[" << i1 << "]" << " de 1\n";
 cout << "[" << i2 << "]" << " de 2\n";
 cout << "[" << i3 << "]" << " de 3\n";
 cout << "[" << i4 << "]" << " de 4\n";
 cout << "[" << i5 << "]" << " de 5\n";
 cout << "[" << i6 << "]" << " de 6\n";
 cout << "[" << i7 << "]" << " de 7\n";
 cout << "[" << i8 << "]" << " de 8\n";
 cout << "[" << i9 << "]" << " de 9\n";
 return 0;
}

Dupa cum se observa un astfel de program este foarte lung chiar daca este simplu de scris.
O versiune mai compacta a acestui program este urmatoarea:
#include <iostream>
using namespace std;

int main() {
 int n;
 int v[10];
 int c;

 for (int i = 0; i < 10; i++) {
  v[i] = 0;
 }

 cin >> n;

 while (n) {
  c = n % 10;
  n = n / 10;
  v[c]++;
 }

 for (int i = 0; i < 10; i++) {
  cout << "[" << v[i] << "]" << " de " << i << "\n";
 }
 return 0;
}
Resultatul este acelasi, dar codul este mai compact, si mai usor de urmarit.