对于数字位数的判断及回文数的判断+Prime Palindromes
来源:互联网 发布:ubuntu登陆界面修改 编辑:程序博客网 时间:2024/04/30 08:59
一、判断数位:
int judgenum(int x)
{
int c;
c = 0;
while(x>1)
{
x=x/10;
c++;
}
return c;
}
许多人使用log的算法,即(由于math.h不支持lg,所以要用log(a)/log(b)的用法)log(a)/log(10)的方法,但这样有两个问题,
1.造成较大误差,计算机以二进制计算,log是根据泰勒级数进行展开的所以两个log一定会有误差。
2.log函数在调用math函数库的时候所进行的参数要求是double和float类型,int类型的整数并不支持。
所以暴力for的计算位数方法比较合适。
二、回文数的判断
int judgeword(int x)
{
int sum =0;
int temp = x;
while(x)
{
sum = sum*10+x%10;
x =x/10;
}
if(sum == temp)
{
return true;
}
else
return false;
}
看不懂的可以用草稿纸进行一下计算。。
下面说说一道典型题:
Prime Palindromes
The number 151 is a prime palindrome because it is both a prime number and a palindrome (it is the same number when read forward as backward). Write a program that finds all prime palindromes in the range of two supplied numbers a and b (5 <= a < b <= 1000,000,000); both a and b are considered to be within the range .
Input
Line 1: Two integers, a and b
OutputThe list of palindromic primes in numerical order, one per line.
Sample Input5 500Sample Output
5711101131151181191313353373383
一开始使用最基本的算法:
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>#include<iostream>using namespace std;int judgeprime(int x){if(x ==1)return false;for(int i=2;i<= sqrt(double(x));i++){if(x%i == 0){return false;}}return 1;}int judgeword(int x){int sum =0;int temp = x;while(x){sum = sum*10+x%10;x =x/10;}if(sum == temp){return true;}elsereturn false;}int main(){int a,b;scanf("%d%d",&a,&b);for(int i =a;i<=b;i++){if(judgeprime(i)){if(judgeword(i)){printf("%d\n",i);}}}return 0;}
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>#include<iostream>using namespace std;int judgeprime(int x){if(x ==1)return false;for(int i=2;i<= sqrt(double(x));i++){if(x%i == 0){return false;}}return 1;}int main(){int a,b;int c,d,e,f;int g,y;scanf("%d%d",&f,&g); for(a=5;a<=7;a++) { if((judgeprime(a)) && (a>=f) && (a<=g) ) { printf("%d\n",a); } } for(a=1;a<=9;a+=2) { y=11*a; if((judgeprime(y)) && (y>=f) && (y<=g) ) printf("%d\n",y); } for(a=1;a<=9;a+=2) { for(b=0;b<=9;b++) { y= a*101+10*b; if((judgeprime(y)) && (y>=f) && (y<=g) ) printf("%d\n",y); } }for(a=1;a<=9;a+=2) { for(b=0;b<=9;b++) {for(c =0;c<=9;c++){ y=a*10001+1010*b+100*c; if((judgeprime(y)) && (y>=f) && (y<=g) ) printf("%d\n",y);} } }for(a=1;a<=9;a+=2) { for(b=0;b<=9;b++) {for(c =0;c<=9;c++){for(d =0;d<=9;d++){ y=a*1000001+100010*b+10100*c+1000*d; if((judgeprime(y)) && (y>=f) && (y<=g) ) printf("%d\n",y);}} } }for(a=1;a<=9;a+=2) { for(b=0;b<=9;b++) {for(c =0;c<=9;c++){for(d =0;d<=9;d++){for(e =0;e<=9;e++){ y=a*100000001+10000010*b+1000100*c+101000*d+10000*e; if((judgeprime(y)) && (y>=f) && (y<=g) ) printf("%d\n",y);}}} } } return 0; }
- 对于数字位数的判断及回文数的判断+Prime Palindromes
- 5位数回文数字的判断(Palindromes)
- Prime Palindromes--回文+素数判断
- 回文/回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 回文数的判断
- 72-回文数的判断,随意的输入一个int数字,判断是不是回文数字
- 你可以输入一个五位以内的数字,我们将判断,该数字是几位数,并且判断其是否为回文数
- 判断一个数的位数
- 简单回文数的判断
- 回文数的判断-Python
- 郁闷的出纳员 treap模板
- A - 棋盘问题
- elasticsearch 第一篇(入门篇)
- 充值流量话费对接微信和支付宝支付实现
- 【从一开始】我的安卓学习之路(一)
- 对于数字位数的判断及回文数的判断+Prime Palindromes
- 1058
- elasticsearch 第四篇(API约定)
- 1002. A+B for Polynomials (25)
- MongoDB关键点集锦(更新中...)
- linux学习笔记(2)
- 1027
- 如何在Linux中加入cron任务
- elasticsearch 第五篇(文档操作接口)