题目1

【问题描述】

同构数是其平方数的尾数等于该数自身的自然数,例如:25*25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

【输入形式】

从键盘输入一个不大于10000的自然数。

【输出形式】

输出格式按样例。

【样例输入1】

25

【样例输出1】

25 yes,25*25=625

【样例输入2】

11

【样例输出2】

11 no,11*11=121

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
int b=a*a-a;
int c=a,d=b;
while((c=c/10)!=0)
{
if(d%10!=0)
{
cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
return 0;
}
d=d/10;
}
if(d%10!=0)
cout<<a<<" no,"<<a<<"*"<<a<<"="<<a*a;
else
cout<<a<<" yes,"<<a<<"*"<<a<<"="<<a*a;

return 0;
}

题目2

【问题描述】

绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。

编写一个程序,求出所有m~n(m≥11,n≤1000000)之间的绝对素数

【输入形式】

两个整数m和n。

【输出形式】

m~n之间的绝对素数,每个数之间用空格隔开,每行输出10个

【样例输入】

11 300

【样例输出】

11 13 17 31 37 71 73 79 97 101
107 113 131 149 151 157 167 179 181 191
199

【代码】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<iostream>
#include <stdio.h>
using namespace std;
int prime(int m){

for (int i = 2; i < m-1; i++)
{
if (m%i==0) return 0;
}
return 1;
}

int inv(int n){
int m=0;
while(n>0){
m=m*10+n%10;//检验回文数,取每个数的尾数
n/=10;
}
return m;
}

int main(){
int m,n,j=0;
cin>>m>>n;
for (int i = m; i < n; i++)
{

if(prime(inv(i))==1&&prime(i)==1){
cout<<i<<" ";
j++;
if(j==10){
putchar('\n');//j=10时换行并置0
j=0;
}
}
}

return 0;
}

代码可能略有不足,请大佬多多指教