这道题一看就是把大的数降为范围在[0,9]中,然后奇,偶步数来判断输出,还有一点需要注意就是如果没有在操作完成就输出,最后操作后的数就完了;但是这里注意在传递参数的时候注意0这个比较特殊;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[]={1,0,0,0,1,0,1,0,2,1};//下标对应
ll f(ll n){//用来统计分解后的结果
ll res=0;
if(n==0)return 1; //注意如果0传过来,是返回1的
while(n){
res+=a[n%10];
n/=10;
}
return res;
}
int main(){
ll T,x,k;
scanf("%lld",&T);
while(T--){
scanf("%lld %lld",&x,&k);
if(k==0){
printf("%lld\n",x);
continue;
}
ll t=x,i,flag=0;
for( i=1;i<=k;i++){
t=f(t);
if(t<10){
i++;break;
}
}
ll all=k-i+1;//剩余步数
if(all==0){printf("%lld\n",t);continue;}
else t=f(t);
all--;//剩余步数
if(all==0){
printf("%lld\n",t);continue;
}
if(t==0){//这里根据表中来 写一写就能理解(因为最后都会转化为0-1或者1-0)
if(all&1)puts("1");
else puts("0");
continue;
}
if(t==1){
if(all&1)puts("0");
else puts("1");
continue;
}
if(t==2){
if(all==1){
puts("0");
}else{
if(all&1)puts("0");
else puts("1");
}
}
}
return 0;
}