题意:
给出位数和一个数,求出在位数内的数的次方的最大值
思路:
循环控制条件是得到的数已经得到过,即处理数出现循环,则无须再处理了,所以用到了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;
}