8 条题解

  • 15
    @ 2022-8-19 18:54:00

    这里我们可以把以前的东东(函数)结合起来~


    首先把以前的 sushu() 函数搬过来~

    bool sushu(int n)
    {
        for (int i = 2; i < n; i++) if (n % i == 0) return false;
        return true;
    }
    

    然后可以把以前判断数字位数是否回文的东东写成函数,记得用 while 哦~

    bool huiwen(int n1)
    {
        int n2 = n1, sum = 0;
        while (n1 > 0)
        {
            sum = sum * 10 + n1 % 10;
            n1 /= 10;
        }
        if (sum == n2) return true;
        else return false;
    }
    

    最后在主函数里写出遍历从(看题呦~)10~1000

    int main()
    {
        for (int i = 10; i <= 1000; i++)
        {
            if (sushu(i) && huiwen(i)) cout << i << endl;
        }
        return 0;
    }
    

    结合起来就是(AC代码~~~)

    #include <bits/stdc++.h>
    using namespace std;
    bool sushu(int n)
    {
        for (int i = 2; i < n; i++) if (n % i == 0) return false;
        return true;
    }
    bool huiwen(int n1)
    {
        int n2 = n1, sum = 0;
        while (n1 > 0)
        {
            sum = sum * 10 + n1 % 10;
            n1 /= 10;
        }
        if (sum == n2) return true;
        else return false;
    }
    int main()
    {
        for (int i = 10; i <= 1000; i++)
        {
            if (sushu(i) && huiwen(i)) cout << i << endl;
        }
        return 0;
    }
    
    • @ 2022-8-19 19:35:02

      可以把这两个函数保存起来,以后可能会有用哦~

    • @ 2024-2-28 17:26:01

      奎若 (hetao794786) LV 10 @ 1 年前 全网最短:

      #include<cstdio>
      using namespace std;bool prime(int x){if(x<2)return false;for(int i=2;i<x;i++)if(x%i==0)return false;return true;}bool pnum(int x){int y=x,z=0;while(x>0)z=z*10+(x%10),x/=10;return y==z;}int main(){for(int i=10;i<=1000;i++)if(prime(i)&&pnum(i))printf("%d\n",i);}
      
    • @ 2024-2-28 17:29:37

      @ 全网最短:

      #include<cstdio>
      using namespace std;bool prime(int x){if(x<2)return false;for(int i=2;i<x;i++)if(x%i==0)return false;return true;}bool pnum(int x){int y=x,z=0;while(x>0)z=z*10+(x%10),x/=10;return y==z;}int main(){for(int i=10;i<=1000;i++)if(prime(i)&&pnum(i))printf("%d\n",i);}
      
  • 4
    @ 2022-10-16 10:25:42

    `

    #include <iostream>
    using namespace std;
    bool prime(int n)
    {
        for(int i = 2;i < n;i++)
        {
            if(n % i == 0)
            {
                return false;
            }
        }
        return true;
    }
    bool huiwen(int m)
    {
        int k = m, sum = 0;
        while (m > 0)
        {
            sum = sum * 10 + m % 10;
            m /= 10;
        }
        if (sum == k) 
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
    int main()
    {
        for(int i = 10;i <= 1000;i++)
        {
            if(prime(i) && huiwen(i))
            {
                cout << i << endl;
            }
        }
        return 0;
    }
    
    
    • 3
      @ 2022-8-22 21:05:48

      上代码!AC过,放心用吧~ 嘿嘿,来啦~to_string这个函数原本cmath里就有,可是这里用不了,哎,就只能自己编一个to_string了呗。这里主要是函数思想,要短很简单.

      #include <iostream>
      using namespace std;
      string i;
      int num;
      #define max 100
      string to_String(int n)
      {
          int m = n;
          char s[max];
          char ss[max];
          int i=0,j=0;
          if (n < 0)// 处理负数,这里用不到
          {
              m = 0 - m;
              j = 1;
              ss[0] = '-';
          }
          while (m>0)
          {
              s[i++] = m % 10 + '0';
              m /= 10;
          }
          s[i] = '\0';
          i = i - 1;
          while (i >= 0)
          {
              ss[j++] = s[i--];
          }
          ss[j] = '\0';
          return ss;
      }
      int hui(string s)//判断回文
      {
          bool j = true;
          for (int i = 0;i < s.length();i++)
          {
              if (s[i] != s[s.length() - i - 1])
              {
                  j = false;
              }
          }
          return j;
      }
      int prime(int s)//判断素数
      {
      	bool j = true;
      	for (int i = 2;i * i <= s;i++)
              {
                  if (s % i == 0)
                  {
                      j = false;
                  }
          }
      	return j;
      }
      int main()
      {    
      	for (int i = 10;i <= 1000;i ++)//遍历
      	{
                  string e = to_string(i);
      	    if (hui(e) && prime(i))
                  {
                      cout << i << endl;
                  }
      	}
      	return 0;
      }
      
      • @ 2022-8-24 15:36:23

        我只能说,何必如此大费周章?其实两个函数即可

      • @ 2024-4-6 16:10:32

        想短就这样:

        #include<cstdio>
        using namespace std;bool prime(int x){if(x<2)return false;for(int i=2;i<x;i++)if(x%i==0)return false;return true;}bool pnum(int x){int y=x,z=0;while(x>0)z=z*10+(x%10),x/=10;return y==z;}int main(){for(int i=10;i<=1000;i++)if(prime(i)&&pnum(i))printf("%d\n",i);}
        
    • 2
      @ 2023-8-10 20:04:30
      #include <bits/stdc++.h>
      using namespace std;
      bool sushu(int n)
      {
          for (int i = 2; i < n; i++) if (n % i == 0) return false;
          return true;
      }
      bool huiwen(int n1)
      {
          int n2 = n1, sum = 0;
          while (n1 > 0)
          {
              sum = sum * 10 + n1 % 10;
              n1 /= 10;
          }
          if (sum == n2) return true;
          else return false;
      }
      int main()
      {
          for (int i = 10; i <= 1000; i++)
          {
              if (sushu(i) && huiwen(i)) cout << i << endl;
          }
          return 0;
      }
      
      • 2
        @ 2023-7-22 18:40:46
        #include <cstdio>
        using namespace std;
        bool prime(int x){
            if(x<2)return false;
            for(int i=2;i<x;i++)if(x%i==0)return false;
            return true;
        }
        bool pnum(int x){
            int y=x,z=0;
            while(x>0)z=z*10+(x%10),x/=10;
            return y==z;
        }
        int main(){
            for(int i=10;i<=1000;i++)if(prime(i)&&pnum(i))printf("%d\n",i);
            return 0;
        }
        

        其中的pnum函数还是@给我的灵感,感谢,代码真好吃😄

        • 2
          @ 2022-9-12 8:50:21

          10~1000的数字,既是素数又是回文数。 素数:因数只有1和自身。 回文数:三位数686,百位和个位相同,两位数88,十位和个位相同。

          编写2个布尔型函数,只要数字满足素数和回文数就输出。

          然后主函数用到for循环, 判断每个数字是否满足素数和回文数

          别忘了输出 endl 哦

          #include <iostream>
          using namespace std;
          bool aaa(int x)
          {
              int a=0, i=1, y=x, z=x;
              while (y>=10)
              {
                  i*=10;
                  y/=10;
              }
              while (z>0)
              {
                  a+=z%10*i;
                  i/=10;
                  z/=10;
              }
              if (a==x) return 1;
              else return 0;
          }
          bool check(int x)
          {
              bool n = true;
          	for (int i=2;i<x;i++)
              {
                  if (x%i==0)
                  {
                      n=false;
                  }
              }
          	return n;
          }
          int main()
          {
              for (int i=10;i<1000;i++) if (aaa(i) && check(i)) cout<<i<<endl;
              return 0;
          }
          
          • 1
            @ 2024-4-14 10:10:14
            #include<bits/stdc++.h>
            using namespace std;
            bool prime(int x);
            int palindrome(int n);
            //判断素数
            bool prime(int x){
                int i=2;
                while(i<=floor(sqrt(x))&&(x%i!=0)){
                    i++;
                }
                if(i>floor(sqrt(x))){
                    return true;
                }
                return false;
            }
            //判断回文数
            int palindrome(int n){
                int sum=0;
                while(n>0){
                    sum=sum*10+n%10;
                    n/=10;
                }
                return sum;
            }
            //主函数
            int main(){
                int n=1000,i;
                for(i=11;i<=n;i++){
                    if(prime(i)&&palindrome(i)==i){
                        cout<<i<<endl;
                    }
                }
                return 0;
            }
            

            (已AC)

            • -4
              @ 2022-5-27 14:03:00

              10~1000的数字,既是素数又是回文数。 素数:因数只有1和自身。 回文数:三位数686,百位和个位相同,两位数88,十位和个位相同。

              注意题目:10~1000,只有三位和两位数两种。所以只需要针对这两种去判断。

              题解:编写2个布尔型函数,只要数字满足素数和回文数就输出。

              素数判断:

              bool prime(int n){
                   for(int i=2;i<n/2;i++){     //2~n/2正常是2~n-1,到n/2,是为了加快进度。
                         if(n%i==0){         
                              return false;
                          }
                   }
                   return true;
              }
              

              回文数判断:

              bool huiwen(int n){     //布尔型判断回文数
                  //这里题目只有两位数或者三位数,所以做2种判断。
                  if(n<100){          //两位数判断
                      int a=n/10;     //获取十位数
                      int b=n%10;     //获取个位数
                      if(a==b){
                          return true;
                      }else{
                          return false;
                      }
                  }else{              //反之就是三位数,那就是百位数和个位数相同就是回文数。
                      
              
              ----------------------------------
                      代码省略,自行编写。
              ----------------------------------
              
              }
              

              最后是主函数

              int main(){
                  for(int i=10;i<=1000;i++){  //题目范围从10~1000
                   if语句判断两个函数,满足函数就输出。
                     }
                  return 0;
              }
              
              • 1

              信息

              ID
              142
              时间
              1000ms
              内存
              16MiB
              难度
              4
              标签
              递交数
              1375
              已通过
              673
              上传者