|
|
вернуться в форум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) ); } |
|
|