用C++解答循环数问题

img

运行结果:

img

代码如下:

#include <iostream>
using namespace std;
//计算n的位数
int nmbws(int n)
{
    int ws=0;
    while(n)
    {
        ws++;
        n/=10;
    }
    return ws;
}
//将数字123转成字符串123123
void int2char(int n,int ws,char buf[])
{
    int i=ws-1;
    int j=2*ws-1;
    while(n)
    {
        buf[i] = '0'+ n%10;
        buf[j] = buf[i];
        i--;j--;
        n/=10;
    }
    buf[2*ws] = 0;
}

//将字符"123"转成数字123
int char2int(char buf[],int n)
{
    int s=0;
    for (int i = 0;i<n;i++)
    {
        s = s*10 + buf[i] - '0';
    }
    return s;
}


int main()
{
    int n,a,b;
    int cnt = 0;
    char buf[20];
    cin >> n;
    for (int i = 0;i<n;i++)
    {
        cin >> a>>b;
        cnt=0;
        for (int j = a;j<=b;j++)
        {
            int ws = nmbws(j);
            int2char(j,ws,buf);
            for (int m = 1;m<ws;m++)
            {
                int vv = char2int(buf+m,ws);
                if(j<vv&& vv >=a && vv<=b && nmbws(vv)==ws)
                {
                    cnt++;
                    //cout << j << "  " << vv << endl;
                }
            }
        }
        cout << cnt<<endl;
    }
    return 0;
}

#include <stdio.h>
int fun(int n)
{
    int s= 0;
    while(n>0)
    {
        s++;
        n/=10;
    }
    return s;
}

int move1(int n,int s)
{
    int b = n%10;
    int k = n/10;
    return k + b*pow(10.0,s);
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        int A,B;
        int count=0;
        scanf("%d%d",&A,&B);
        for(int j=A;j<=B;j++)
        {
            int s = fun(j);
            int t = move1(j,s-1);
            while(t != j)
            {
                if(t>j && t<B)
                    count++;
                t = move1(t,s-1);
            }
        }
        printf("%d\n",count);
    }
    return 0;
}