summaryrefslogtreecommitdiff
path: root/cpp/conversioneBinariaDec.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/conversioneBinariaDec.cc')
-rw-r--r--cpp/conversioneBinariaDec.cc42
1 files changed, 42 insertions, 0 deletions
diff --git a/cpp/conversioneBinariaDec.cc b/cpp/conversioneBinariaDec.cc
new file mode 100644
index 0000000..e88a2fb
--- /dev/null
+++ b/cpp/conversioneBinariaDec.cc
@@ -0,0 +1,42 @@
+#include <iostream>
+#include <math.h>
+#include <string.h>
+
+using namespace std;
+
+const int b = 32;
+
+int main()
+{
+ int v[b] = {0}; //tutti i valori sono uguali a 0
+ char str[b];
+ int valVuoto, i, j;
+ int num = 0;
+
+ cin >> str;
+ /* se la lunghezza della stringa è inferiore a quella della base, indica da quale punto è vuota */
+ if(strlen(str) < b)
+ valVuoto = strlen(str);
+
+ /* ordina i valori in modo tale da spostarli a blocco, ovvero entrambi gli indici si incrementano
+ man mano che ordinano il vettore degli interi. La base - la prima X di 'str' è l'inizio dell'ordine
+ del vettore degli int.
+
+ Seguendo questa logica e questo esempio:
+ STR -
+ 1 0 x x x x x x
+
+ V -
+ x x x x x x 1 0
+ */
+ for(i = b - valVuoto, j = 0; i < b; i++, j++)
+ v[i] = str[j] - '0';
+
+ //il vettore viene letto in ordine decrescente, mentre le potenze in crescente
+ for(i = b - 1, j = 0; i > -1; i--, j++)
+ num += v[i] * pow(2, j);
+
+ cout << num << endl;
+
+ return 0;
+}