3 条题解
-
9
#include <iostream> using namespace std; int n, ans, a[55], cnt; bool huiwen(int x) { int res = 0, num = x; while (x) { res = res * 10 + x % 10; x /= 10; } if (res == num) return true; else return false; } int main() { cin >> n; for (int i = 1; i <= n; i++) { cnt = 0;//注意cnt每次初始化为0 if (!huiwen(i)) continue;//十进制下不是回文直接跳过 int k = i;//保存i while (k) { a[++cnt] = k % 2; k /= 2; } bool flag = true;//注意每次初始化为true for (int i = 1; i <= cnt; i++)//由于是++cnt。所以储存进去的下标是1到cnt { if (a[i] != a[cnt - i + 1]) flag = false;//我们要判断a[1]和a[cnt], a[2]和a[cnt - 1],转换成数学关系就是 //a[i]和a[cnt - i + 1] } if (flag)//此时说明二进制下也是回文了 { ans++; } } cout << ans; return 0; }
-
3
嗨害嗨,我又来了! 今天给大家讲讲进制回文。 既然老师讲了C++的做法,那我就给大家看看Python的做法(理解了思维就可以套进去) 既然要求在10进制和2进制下都是回文数,那么我们只需套用回文数的定义即可:若数a正着写反着写一样,数a就是回文数。如4554倒着写也是4554,它就是回文数。而a是几进制都无所谓。 回到问题上,只要我们依次枚举范围内的每一个数,再判断是否在10进制和2进制下都是回文数即可。 上代码!
def check_str(string): #求回文数的时候忽略进制,方法通用,所以可以当做函数。 #string就是str(字符串) suoying=len(string) copy_string='' for i in range(suoying-1,-1,-1):#倒求回文 copy_string+=string[i] if copy_string == string:#回文==原数? return True return False#return会直接结束函数,无论后面有无return指令 a=int(input()) S=0 for i in range(1,a+1): b=bin(i) bs=b[2:] #pyhton中bin()会得到以0b开头的数,所以要切片来去除'0b'。 p=str(i) if check_str(bs) and check_str(p): S+=1 print(S)
-
1
#include <iostream> #include <algorithm> #include <math.h> #include <string> using namespace std; string str1, str2; int n, ans; //判断回文数(字符串) bool isPalindrome(string str) { for(int i = 0; i < str.size() / 2; i++) { if(str[i] != str[str.size() - 1 - i]) { return false; } } return true; } //数字转十进制字符串 string toDecimalism(int x) { char c[1001] = {0}, t[1001] = {0}; int i = 0, j = 0; while(x) { c[i++] = (x % 10) + '0'; x /= 10; } while(i) { t[j++] = c[--i]; } return t; } //数字转二进制字符串 string toBinary(int x) { char s[1001] = {0}, c[1001] = {0}; int i = 0, j = 0; while(x) { s[i] = x % 2 + '0'; i++; x /= 2; } while(i) { c[j++] = s[--i]; } return c; } int main() { cin >> n; for(int i = 1; i <= n; i++) { str1 = toDecimalism(i); str2 = toBinary(i); if(isPalindrome(str1) && isPalindrome(str2)) { ans++; } } cout << ans; return 0; }
- 1
信息
- ID
- 1981
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 273
- 已通过
- 180
- 上传者