主要通过编写函数实现
Description |
输入一个自然数,判断它是几位数,并判断它是否是对称数和素数。 有多组数据测试 |
Input |
输入一个自然数 |
Output |
正整数的位数、是否是对称数和是否是素数。 |
Sample Input |
97 121 16961 |
Sample Output |
2 No Yes 3 Yes No 5 Yes No |
几位数:(这里不懂的可以自己列举数字试一下)
int jiweishu(int n){
int i = 0;
while(n>0){
n/=10;
i++;
}
return i;
}
素数:素数指的是大于1且除了1和它本身外无其它因数的数字(注意:1不是素数)
bool isprime(int n){
for(int i = 2;i<=sqrt(n);i++){
if(n%i==0||n==1) return 0;
}
return 1;
}
回文数(对称数)
顾名思义左右对称,可看作正序等于倒序(此处比较写的是全部比较,也可以比较一半)
bool duichenshu(int n){
int digit = jiweishu(n);
int i = 0,a[50],m,c;
m = n;
while(n>0){
a[i] = n%10;//所得位数是逆序的
i++;
n/=10;
}
for(i = digit-1;i>=0;i--){//得到正序的各个位数
c=m%10;
m /=10;
if(a[i]!=c)return 0;//正逆比较
}
return 1;
}
bool类型是判断真假的类型,只能返回1和0;这些函数也都可以直接写成int类型
例如:
int isprime(int n)
代码实现:
#include<iostream> #include<iomanip> #include<math.h> using namespace std; //几位数 int jiweishu(int n){ int i = 0; while(n>0){ n/=10; i++; } return i; } //素数 bool isprime(int n){ for(int i = 2;i<=sqrt(n);i++){ if(n%i==0||n==1) return 0; } return 1; } //回文数 bool duichenshu(int n){ int digit = jiweishu(n); int i = 0,a[50],m,c; m = n; while(n>0){ a[i] = n%10;//所得位数是逆序的 i++; n/=10; } for(i = digit-1;i>=0;i--){//得到正序的各个位数 c=m%10; m /=10; if(a[i]!=c)return 0;//正逆比较 } return 1; } int main(){ int n; while(cin>>n){ cout<<jiweishu(n)<<' '; if(duichenshu(n)==1) cout<<"Yes"<<' '; else cout<<"No"<<' '; if(isprime(n)==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
运行结果:
注意:“==”与“=”意义不一样,别写错了