9.6 巨人网络 AC 1.8
第一题 StringToFloat
死活都是 80% , 直接把输入的字符串输出就是 100% 。。
float ConvertStringToFloat(string str) { if(str.size() == 0) return 0.0; float res = 0, flag = 1, ind = -1, len = str.size(), base = 0.1; if(str[ind+1] == '+') ind++; if(str[ind+1] == '-') ind++, flag = -1; while(++ind < len && str[ind] != '.' && str[ind] >= '0' && str[ind] <= '9') res = res * 10 + str[ind] - '0'; if(ind < len && str[ind] == '.') { while(++ind < len && str[ind] >= '0' && str[ind] <= '9') res += base * (str[ind] - '0'), base *= 0.1; } if(ind < len && str[ind] == 'E' || str[ind] == 'e') { bool isActive = true; if(str[ind+1] == '+') ind++; if(str[ind+1] == '-') ind++, isActive = false; int num = 0; while(++ind < len && str[ind] >= '0' && str[ind] <= '9') num = num * 10 + str[ind] - '0'; while(num-- > 0) { if(isActive) res *= 10; else res /= 10; } } return res * flag; }
第二题 求二维角度
如果题目早点告知这里的范围是 0~360 应该就不用浪费这么多时间了。。
调试到天荒地老,最后终于 A 了
最后没保存上代码,大概是这样的
float getRes(float x, float y) { if(y == 0 && x < 0) return 180; float mode = sqrt(x*x + y*y), res, pi = 3.14159265265; res = acos(x / mode) * 180.0 / pi; if(y < 0) return 360 - res; return res; }#笔试题目##巨人网络#