回文数的定义以及拓展使用
回文数
定义:正读反读一样的数,从左向右读与从右向左读是完全一样的自然数。例如:91,11,202,1001等,1011就不是。
题目1:输入两个数l,r,输出x。其中x满足在[l,r]范围内回文数的个数。
1 #include <iostream> 2 #include<stdio.h> 3 #include<math.h> 4 5 using namespace std; 6 int huiwen(int num) 7 { 8 int o = num; //o存储正序 9 int tmp = 0; 10 while(num != 0) //tmp存储逆序 11 { 12 tmp *= 10; 13 tmp += num % 10; 14 num /= 10; 15 } 16 if (tmp == o) //回文数正序逆序是否相当来判断 17 //if(tmp%10 == o%10) //取正序逆序的个位数判断 18 { 19 return 1; 20 } 21 return 0; 22 } 23 24 int main() 25 { 26 int l,r; 27 scanf("%d %d",&l,&r); 28 int count=0; 29 for(int i=l;i<=r;i++) 30 { 31 if(huiwen(i)==1) count++; 32 } 33 cout<<count<<endl; 34 return 0; 35 }
拓展:定义一个特殊的回文数,只要求首部与尾部相等即可。例:8,11,202,1001,1011等
题目2:输入两个数l,r,输出x。其中x满足在[l,r]范围内回文数的个数。
1 #include <iostream> 2 #include<stdio.h> 3 #include<math.h> 4 5 using namespace std; 6 int huiwen(int num) 7 { 8 int o = num; //o存储正序 9 int tmp = 0; 10 while(num != 0) //tmp存储逆序 11 { 12 tmp *= 10; 13 tmp += num % 10; 14 num /= 10; 15 } 16 //if (tmp == o) //回文数正序逆序是否相当来判断 17 if(tmp%10 == o%10) //取正序逆序的个位数判断 18 { 19 return 1; 20 } 21 return 0; 22 } 23 24 int main() 25 { 26 int l,r; 27 scanf("%d %d",&l,&r); 28 int count=0; 29 for(int i=l;i<=r;i++) 30 { 31 if(huiwen(i)==1) count++; 32 } 33 cout<<count<<endl; 34 return 0; 35 }