Hola Undíamartes.
Esta es mi solución al problema:
#include <stdio.h>
#include <string.h>
#define MAX 16
int main() {
char input[MAX];
char *p = input;
int length = 0;
char readed = 0;
double carry = 1;
double result = 0;
p += length-1;
while(length > 0) {
readed = *p;
p--;
length--;
if((readed-'0') >= 0 && (readed-'0') <= 9) {
result += (readed-'0') * carry;
carry *= 10;
} else {
switch(readed) {
case 'M':
carry = 1000000;
break;
case 'k':
carry = 1000;
break;
case 'h':
carry = 100;
break;
case 'a':
carry = 10;
p--;
length--;
break;
case 'd':
carry = 0.1;
break;
case 'c':
carry = 0.01;
break;
case 'm':
carry = 0.001;
break;
case 'u':
carry = 0.000001;
break;
}
}
}
}
Esta es la salida del programa:
223u
0.000223
0.000223
27da298c
272.980000
272.98
252k35u
252000.000035
252000
23M263k
23263000.000000
2.3263e+07
265da34
2684.000000
2684
Saludos.