8 条题解
-
15
这里我们可以把以前的东东(函数)结合起来~
首先把以前的 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; }
-
4
`
#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
上代码!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; }
-
2
#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
#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; }
-
2
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
#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
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
- 上传者