您的位置:首页 > 其它

Calculator Conundrum

2016-02-05 15:08 225 查看
题意:

给出位数和一个数,求出在位数内的数的次方的最大值

思路:

循环控制条件是得到的数已经得到过,即处理数出现循环,则无须再处理了,所以用到了set,用来判断处理数是否出现过

那截取位数用到了sstream s <<a*a, st = s.str(), 现将数转为字符串,再用substr截取需要的位数,再用 sstream s2(st) >> ans, 将字符串转为数字

代码:

#include<cstdio>
#include<sstream>
#include<set>
using namespace std;
int k, n;
int next(int a, int b) {
stringstream s;
s<<(long long)a*a;
string st = s.str();
if(st.length() > b) st = st.substr(0, b);
int ans;
stringstream s2(st);
s2>>ans;
return ans;
}

int main() {
set<int>s;
int kase;
int ans = 0;
scanf("%d", &kase);
while(kase--) {
s.clear();
scanf("%d%d", &n, &k);
ans = 0;
while(!s.count(k)) {
s.insert(k);
if(ans < k) ans = k;
k = next(k, n);
}
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: