Codeforces Round 1027 (Div. 3)
Problem - A - Codeforces
模块题目,字符转化数字和数字快速求平方根
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin >> t;while (t--){string man;cin >> man;int kobe = 0;for (int i = 0; i < 4; i++){kobe += (man[i] - '0') * pow(10, 3 - i);}//二分查找:int left = 0;int right = kobe;int mid = 0;while (left < right){mid = (left + right + 1) / 2;if (mid * mid == kobe){//必须赋值left,不然出大事left = mid;break;}if (mid * mid < kobe){left=mid;}if (mid * mid > kobe){right = mid-1;}}if (left * left == kobe){cout << 0 << " " << left << "\n";}else{cout << -1 << "\n";}}
}
或者:
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin >> t;while (t--){string man;cin >> man;int kobe = 0;for (int i = 0; i < 4; i++){kobe += (man[i] - '0') * pow(10, 3 - i);}//二分查找:int left = 0;int right = kobe;int mid = 0;while (left < right){mid = (left + right + 1) / 2;if (mid * mid <= kobe){left=mid;}if (mid * mid > kobe){right = mid-1;}}if (left*left == kobe){cout << 0<< " " << left << "\n";}else{cout << -1 << "\n";}}
}