文章

11

粉丝

406

获赞

3

访问

79.3k

头像
递归求解(无需遍历)
P1002 兰州大学机试题
发布于2020年3月25日 12:52
阅读数 9.4k

#include<iostream>
#include<cmath>

using namespace std;

// 计算num位数字内所有含2的数字数量
int innerSize(int num)
{
    if(num==1){return 1;}
    if(num<=0){return 0;}
    return innerSize(num-1)*10+pow(10,num-1);
}

// 计算整数位数
int getLen(int num)
{
    int length=0;
    while(num)
    {
        num/=10;
        length++;
    }
    return length;
}

// 递归计算含2的数量
int contTwo(int limitNum)
{
    if(limitNum<=1){return 0;}
    int length = getLen(limitNum);
    int thresh = int(limitNum/int(pow(10,length-1))),
    rest=int(limitNum%(int(pow(10,length-1))));
    if(thresh>2)
    {
        return thresh*innerSize(length-1)+int(pow(10,length-1))+contTwo(rest);
    }
    else if(thresh<2)
    {
        return thresh*innerSize(length-1)+contTwo(rest);
    }
    else
    {
        return thresh*innerSize(length-1)+(rest+1)+contTwo(rest);
    }
}

int main(){
    int l,r;
    cin>>l>>r;
    if(l>r){cout<<0;ret...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发