进制转换 image

编程实现:九进制回文数

提示信息:

回文数:反向排列与原来一样的数就叫做回文数 。 例如,12321是回文数,1231不是回文数。

九进制数:指逢9进位的一种进位计数制,以0、1、2、3、4、5、6、7、8共九个数码表示。例如:十进制数9等于九进制数10,十进制数81等于九进制数100,以此类推。

题目描述:

给定两个正整数N和M(1≤N≤M≤5000),请计算出N到M之间(含N和M)总共有多少个数满足以下条件:

1、转换为九进制之后为回文数;

2、转换为九进制后每个数位上的数字都是奇数。

例如:

当N=90,M=120,90到120之间(含90和120)总共有2个数满足条件,为91和109。

91转换为九进制为111,是一个回文数,且每个数位上的数字都是奇数;

109转换为九进制为131,是一个回文数,且每个数位上的数字都是奇数;故输出2。

输入描述:

输入两个正整数N和M(1≤N≤M≤5000),两个正整数之间用一个空格隔开

输出描述:

输出一个整数,表示N到M之间(含N和M)总共有多少个满足条件的正整数

样例输入:90 120

样例输出:2

4 条评论

  • @ 2024-2-23 17:51:32

    👍 👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍

    • @ 2024-2-23 17:39:32
      #include<bits/stdc++.h>
      using namespace std;
      const int N = 1e6+10;
      int n,m,ans=0;
      
      bool pd(int a){
          int num1=0,num2=0,k=1;
          while(a){
              int tmp = a%9;
              if(tmp%2==0)return false;
              num1=num1*9+tmp;
              num2=tmp*k+num2;
              k*=9;
              a/=9;
          }
          if(num1==num2)return true;
          else return false;
      }
      
      
      int main(){
          cin>>n>>m;
          for(int i=n;i<=m;i++){
              if(pd(i)){
                  ans++;
              }
          }
          cout<<ans;
          return 0;
      }
      
      • @ 2024-2-23 17:31:40

        👍

      • @ 2024-2-23 17:30:59
        #include<iostream>
        #include<cctype>
        using namespace std;
        int main()
        {
            int n,m,i,sum=0,time=1;
            char num1[30]={0};
            int num2[30]={0};
            int num3[30]={0};
            cin>>n>>num1>>m;
            for(i=0;num1[i]!=0;i++)
            {
                if(isdigit(num1[i]))
                {
                    num2[i]=num1[i]- '0';
                }
                else
                {
                    num2[i]=(num1[i]- 'A')+10;
                }
            }
            int len1=i;
            for(i=len1-1;i>=0;i--)
            {
                sum+=num2[i]*time;
                time*=n;
            }
            int len2=0;
            while(sum>=1)
            {
                num3[len2]=sum%m;
                sum/=m;
                len2++;
            }
            for(int i=len2 - 1;i>=0;i--)
            {
                if(num3[i]<10)
                {
                    cout<<num3[i];
                }else{
                    cout<<(char)num3[i]-10+ 'A';
                }
            }
            return 0;
        }
        
        • 1