Why wrong answer
#include<iostream>
#include<cmath>
#define MAX 32768 //input stream 256KB
#define SWAP( a,b ) { a=a^b; b=a^b; a=a^b; }
using namespace std;
void printSqrt( char * );
int isSpace( int );
void reverseString( char * );
void findSqrt( char *, char * );
int main()
{
// Reads the input
char input_stream[MAX];
for( int i=0; i<MAX; i++)
{
std::cin.get( input_stream[i] );
if( std::cin.eof() )
break;
}
// Find square root for all integers
printSqrt( input_stream );
return 0;
}
void printSqrt( char *inp )
{
// reverse the string
reverseString( inp );
// get each string
char *start=inp;
char *end=inp;
for(;*inp!='\0';inp++)
{
if(isSpace(*inp))
{
findSqrt( start, end );
start=inp+1;
end=inp+1;
}
else
{
end=inp;
}
}
findSqrt( start, end );
}
void findSqrt( char *start, char *end )
{
if(isSpace(*start) || *start=='\0')
return;
int strln = (end-start+1);
char *p = new char[strln*sizeof(char)];
int i;
for(i=0;i<strln;i++)
*(p+i)=*(start+i);
*(p+i)='\0';
reverseString( p );
// convert char array to number
unsigned long long num=0;
for(int j=0;*(p+j)!='\0';j++)
{
num*=10;
num+=*(p+j)-'0';
}
std::cout.precision(4);
std::cout << std::fixed << sqrt(num) << std::endl;
delete p;
}
int isSpace( int c )
{
switch ( c )
{
case ' ':
case '\n':
case '\t':
case '\v':
case '\f':
case '\r':
return 1;
}
return 0;
}
void reverseString( char *strg )
{
int i = 0;
while( *(strg+i) != '\0' )
i++;
i--;
for( int j=0,k=i; j<k; j++,k-- )
SWAP( *(strg+j), *(strg+k) );
}