#include <stdio.h> #include <iostream> using namespace std; //整形 double myItoa(const char *pChar) { //空指针 if(pChar == NULL) { printf("NULL pointer\n"); return 0; } int len = strlen(pChar); if( 0 == len ) { //空字符串 printf("NULL Char *\n"); return 0; } else { int sign = 1; int i = 0; double result = 0.0; //正负号 if(pChar[0] == '-') { if(pChar[1] == '.') { printf("invalid number (-.xxx)\n"); return 0; } sign = -1; i++; } if(pChar[0] == '+') { if(pChar[1] == '.') { printf("invalid number (+.xxx)\n"); return 0; } sign = 1; i++; } double base1 = 10; double base2 = 0.1; double basetmp = base1; for ( ;i < len; i++) { if(pChar[i] == '.') { double result1 = result; result = 0.0; if(basetmp == base2) { printf("invalid number (xxx.xx.xx)\n"); return 0; } basetmp = base2; for (int j = strlen(pChar)-1; j > i; j--) { //cout<<pChar[j]<<endl; int diff = pChar[j]-'0'; if(diff >= 10 || diff < 0) { //非法字符 printf("pchar - unvalid char: %c\n", pChar[j]); return 0; } result = (result+diff)*basetmp; } return sign*(result+result1); } int diff = pChar[i]-'0'; if(diff >= 10 || diff < 0) { //非法字符 printf("pchar - unvalid char: %c\n", pChar[i]); return 0; } result = result*basetmp+diff; } return sign * result; } return 0; } void main() { char* pc = new char[100]; cin>>pc; //防止出界 2^64 if(strlen(pc) > 20 ) { printf("Big Number\n"); return; } double pcI = myItoa(pc); //cout<<sizeof(pcI)<<endl; printf("%lf\n", pcI); }
itoa
最新推荐文章于 2022-07-03 21:44:31 发布