Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
实在不知道哪里错了啊,求求那位能干给个测试数据,不知道错在哪里啊#include <iostream> #include <math.h> using namespace std; long double func(long double A,long double B,long double C) { long double result; result = (((-1)*B)+sqrt(B*B-4*A*C)) / (2*A); //cout <<"sqrt = "<< result <<endl; return result; } long double Location(long double n) { long double temp = (long double)n; if ( n <= 45 && n >= 1) { return func(1.0,1.0,-2*temp); } else if (n > 45 && n <= 9045 ) { return func(1.0,-8.0,36.0-temp); } else if (n > 9045 && n<= 1395495) { return func(1.0,-71.0,(-1.0)*(temp-9045.0)*2.0/3.0-2772.0); } else if (n > 1395495 && n <= 189414495) { return func(2.0,-1105.0,-892107.0+1395495.0-temp); } else if ( n > 189414495 && n <= 23939649495) { return func(5.0,-22207.0,(-2.0)*(temp-189414495.0)-277852212.0); } else { //cout << "fail!"<<endl; return -1.0; } } unsigned int CoLocation(unsigned int input) { if (input >= 1&&input <= 9) { return (input*input+input) / 2; } else if (input >= 10 && input <= 99) { return (input*input-8*input+36); } else if (input >= 100&&input <= 999) { return (9045 + (3 * input + 84)*(input - 99) / 2); } else if (input >= 1000&& input <= 9999) { return (1395495+2*input*input - 1105*input - 892107);; } else if (input >= 10000&& input <= 99999) { return (189414495 + (5*input*input-22207*input - 277852212) / 2); } else { //cout << "fail"<<endl; return -5; } } unsigned long int PosToRang(unsigned long int off,unsigned int long bs) { if (off % bs != 0) { return (off / bs) + 1; } else { return off / bs; } } unsigned long int MyPow(unsigned long int y) { unsigned long int i; unsigned long int p = 1; for ( i = 0;i < y;++i) { p *= 10; } return p; } unsigned long int HandleForDig(unsigned long int off,unsigned long int bs,unsigned long int area) { unsigned long int t; t = off % bs; if( t == 0) { return area % 10; } else { return (area / MyPow(bs-1)); } } unsigned long int PosToDigit(unsigned long int offset,unsigned long int area) { if ( offset == 0) { return (area%10); } else if (offset > 0) { if (offset >= 1&&offset <= 9) { return offset; } if (offset >= 10&& offset <= 189) { unsigned long int f = offset - 9; unsigned long int tmp; tmp = PosToRang(f,2) + 9; return HandleForDig(f,2,tmp); } if (offset >= 190 && offset <= 2889) { unsigned long int tmp; unsigned long int f = offset - 189; tmp = PosToRang(f,3) + 99; return HandleForDig(f,3,tmp); } if (offset >= 2890 && offset <= 38889) { unsigned long int f = offset - 2889; unsigned long int tmp; tmp = PosToRang(f,4) + 999; return HandleForDig(f,4,tmp); } if (offset >= 38890 && offset <= 488889 ) { unsigned long int f = offset - 38889; unsigned long int tmp; tmp = PosToRang(f,5)+9999; return HandleForDig(f,5,tmp); } } else { //cout << "fail!"<<endl; return -1; } } int main() { long double input; unsigned long int tmp; unsigned long int num; cin >> num; while (num > 0) { cin >> input; tmp = (unsigned long int)(Location(input)); //cout << "CoLoation = "<<CoLocation(tmp)<<endl; unsigned long int base = (unsigned long int)input - CoLocation(tmp); cout << PosToDigit(base,tmp)<<endl; --num; } return EXIT_SUCCESS; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator