Escriba una función en C ftoa() que convierta un número de coma flotante dado o un doble en una string. No se permite el uso de funciones de biblioteca estándar para la conversión directa. El siguiente es un prototipo de ftoa(). El artículo proporciona información sobre la conversión de C doble a string.
ftoa(n, res, afterpoint) n --> Input Number res[] --> Array where output string to be stored afterpoint --> Number of digits to be considered after the point.
Ejemplo:
- ftoa(1.555, str, 2) debe almacenar «1.55» en res.
- ftoa(1.555, str, 0) debe almacenar «1» en res.
Recomendamos encarecidamente minimizar el navegador y probarlo usted mismo primero. Una forma simple es usar sprintf() , pero no se permite el uso de funciones de biblioteca estándar para la conversión directa. Enfoque: La idea es separar partes enteras y fraccionarias y convertirlas en strings por separado. Los siguientes son los pasos detallados.
- Extraiga la parte entera del punto flotante o el número doble.
- Primero, convierta la parte entera a la string.
- Extrae la parte fraccionaria por la parte entera exacta de n.
- Si d es distinto de cero, haga lo siguiente.
- Convierta la parte fraccionaria en un número entero multiplicándolo con pow(10, d)
- Convierta el valor entero en una string y añádalo al resultado.
A continuación se muestra la implementación en C del enfoque anterior.
C
// C program for implementation of ftoa() #include <math.h> #include <stdio.h> // Reverses a string 'str' of length 'len' void reverse(char* str, int len) { int i = 0, j = len - 1, temp; while (i < j) { temp = str[i]; str[i] = str[j]; str[j] = temp; i++; j--; } } // Converts a given integer x to string str[]. // d is the number of digits required in the output. // If d is more than the number of digits in x, // then 0s are added at the beginning. int intToStr(int x, char str[], int d) { int i = 0; while (x) { str[i++] = (x % 10) + '0'; x = x / 10; } // If number of digits required is more, then // add 0s at the beginning while (i < d) str[i++] = '0'; reverse(str, i); str[i] = '\0'; return i; } // Converts a floating-point/double number to a string. void ftoa(float n, char* res, int afterpoint) { // Extract integer part int ipart = (int)n; // Extract floating part float fpart = n - (float)ipart; // convert integer part to string int i = intToStr(ipart, res, 0); // check for display option after point if (afterpoint != 0) { res[i] = '.'; // add dot // Get the value of fraction part upto given no. // of points after dot. The third parameter // is needed to handle cases like 233.007 fpart = fpart * pow(10, afterpoint); intToStr((int)fpart, res + i + 1, afterpoint); } } // Driver program to test above function int main() { char res[20]; float n = 233.007; ftoa(n, res, 4); printf("\"%s\"\n", res); return 0; }
"233.0070"
Complejidad de tiempo : O (logn)
Espacio Auxiliar : O(1)
Nota: El programa realiza una operación similar si en lugar de float, se toma un tipo doble. Este artículo es una contribución de Jayasantosh Samal. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA