题目描述:
小Q的数学老师给了小Q一个整数N,问小Q能否将N分解为两个整数X和Y相乘,并且满足X为奇数,Y为偶数,即能否找到奇数X和偶数Y满足X*Y=N
输入描述:
输入第一行包含一个正整数t(1<=t<=1000),表示测试样例数。
接下来的t行,每行一个正整数N(2<=N<=2^63),表示给出的N。保证N不是2的幂次
输出描述:
如果能找到这样的X,Y,则依次输出X,Y,如果有多解输出Y最小的那组解,以空格分隔,否则输出“NO”
示例:
输入:
2
10
5
输出:
5 2
NO
#include<iostream>
#include<vector>
#include <string>
#include<algorithm>
#include<sstream>
using namespace std;
string int_to_String(int n)
{
ostringstream stream;
stream<<n;
return stream.str();
}
int main(){
int n;
cin>>n;
vector<int> a;
for(int i=0;i<n;i++){
int m;
cin>>m;
a.push_back(m);
}
vector<string> res;
for(int i=0;i<n;i++){
int k=a[i];
if(k%2!=0)
res.push_back("NO");
else{
int x=k/2,y=2;
while(x%2==0){
y=y*2;
x=x/2;
}
string ss=int_to_String(x)+" "+int_to_String(y);
res.push_back(ss);
}
}
for(int i=0;i<res.size();i++)
cout<<res[i]<<endl;
return 0;
}
刚开始用to_string(int a),出错,好像是VS版本原因,参数需要long long 或unsigned long long
后改成sstream