Carrying Conundrum

​​​​​​20211012 - Virtual Judge (vjudge.net)

链接

这个题是隔位进位,可以把数按奇偶拆开
例如 2021  奇数位是22  偶数位是1
22可以由( 0 22 ,1 22  2 20 ,3 19 ..... ,22 0 )一共是23种
同理 偶数位是 2种 所有的可能就是23*2=46 
但是注意这个题目要求 a和b是不为0的 所以减去两种情况 就是44种
再例如 10000  奇数位是100 偶数位是0 所有可能就是101*1=101 再减去2答案为99

#include<bits/stdc++.h>
#include<iostream>
using namespace std;    
int q[1000010];
int main(){
    int x;//测试组数 
    cin>>x;
    while(x--){
        int n;
        cin>>n;
        int a=0,b=0; //分别来存储 偶数位和奇数位 
        int t=n;  
        int cnt=1;
        while(t){    //将n的每一位数输入到数组里 
            q[cnt]=t%10;
            t/=10;
            cnt++;
        }
        for(int i=cnt;i>0;i-=2){
            a*=10;
            a+=q[i];
        }
        for(int i=cnt-1;i>0;i-=2){
            b*=10;
            b+=q[i];
        }
        int res=(a+1)*(b+1)-2; //套用刚才的公式 
        cout<<res<<endl;
    }
}

这个法子也不是我想到的 之前cf做题碰到就记住了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值