原题链接: Carrying Conundrum
思路:因为题目定义的进位是往前两位进位,也就是奇数位进奇数位,偶数位进偶数位,
进而可以发现奇数位和偶数位互不影响。我们把目标数n的奇偶位分开组成新的数:比如
n=abcd ,n1=ac ,n2=bd。正常运算下凑一个数x的方式数是x+1,最后减去n1和n2是0的情况
最终答案就是:(n1+1)*(n2+1)-2 。
void solve(){
ll n;
cin>>n;
ll a=0,b=0; int cnt=1; ll k=1;
while(k<=n) k*=10,cnt++;k/=10;cnt--;
while(cnt){
if(cnt%2==1)
a=a*10+n/k;
else b=b*10+n/k;
n=n%k; k/=10;
cnt--;
}
cout<<(a+1)*(b+1)-2<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}