题目:
Last night, I must have dropped my alarm clock. When the alarm went off in the morning, it showed 51:80 instead of 08:15. This made me realize that if you rotate a seven segment display like it is used in digital clocks by 180 degrees, some numbers still are numbers after turning them upside down.
题意:
判断一个数是否为素数,之后在判断反转后是否也是;
分析:
题中所谓的反转一定要看图,左右反转再加上上下反转,所以我们就需要进行两部的反转操作:
根据图就知道 0 1 2 3 4 5 6 7 8 9反转后分别对应0 1 2 -1 -1 5 9 -1 8 6(-1代表没有意义),当然我们还需要进行位置的对称反转操作;
代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
using namespace std;
char s[20];
char s1[20];
int ans[10]={0,1,2,-1,-1,5,9,-1,8,6};//由于是int 到Int的转化,所以就简单的用一个数组就可以
long long int intt()
{
int i,len;
long long sum=0;
len=strlen(s);
//printf("%d\n",len);
for(i=0;i<len;i++)
{
sum=sum+(s[i]-'0')*(long long)round(pow(10,len-1-i));//使用pow函数是非常不稳定的,记得一定要进行强制转换
}
return sum;
}
long long int solve()
{
int i,len;
long long sum=0;
len=strlen(s);
for(i=0;i<len;i++)
{
s1[i]=ans[s[len-i-1]-'0']+'0';
if(s1[i]-'0'<0)
{
return -1;
}
}
for(i=0;i<len;i++)
{
sum=sum+(s1[i]-'0')*(long long)round(pow(10,len-1-i));
}
return sum;
}
int main()
{
long long i,n;
memset(s,'\0',sizeof(s));//字符数组初始化
memset(s1,'\0',sizeof(s1));
int flag;
while(scanf("%s",s)!=EOF)//用字符串输入,在进行反转是好操作
{
n=intt();
// printf("%lld\n",n);
if(n==1)
{
printf("no\n");
continue;
}
flag=0;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag=1;
break;
}
}
if(flag==1)
printf("no\n");
else
{
int flag2=0;
n=solve();
if(n==-1)
{
printf("no\n");
continue;
}
// printf("%lld\n",n);
for(i=3;i<=sqrt(n);i=i+2)
{
if(n%i==0)
{
flag2=1;
break;
}
}
if(flag2==1)
printf("no\n");
else
printf("yes\n");
}
}
return 0;
}