本文共 2269 字,大约阅读时间需要 7 分钟。
练好基本功
进制转换
#include #include #include #include #include using namespace std;int n,s,a[1000],t,ans[1000];int tear(int x,int p)//把x拆成p进制数 { int l=0; while(x) { a[++l]=x%p; x/=p; } int f=1; for(int i=1;i<=l/2;i++) { if(a[i]!=a[l-i+1]) {f=0;break;} } return f;}int main(){ scanf("%d%d",&n,&s); for(int i=s+1;t!=n;i++) { int l=0,y=2; while(l<2&&y<=10) { l+=tear(i,y); y++; } if(l==2) ans[++t]=i; } for(int i=1;i<=t;i++) printf("%d\n",ans[i]); return 0;}
转载于:https://www.cnblogs.com/dfsac/p/7587917.html
优化后的文章内容:
练好基本功
进制转换
#include #include #include #include #include using namespace std;int n,s,a[1000],t,ans[1000];int tear(int x,int p)//把x拆成p进制数 { int l=0; while(x) { a[++l]=x%p; x/=p; } int f=1; for(int i=1;i<=l/2;i++) { if(a[i]!=a[l-i+1]) {f=0;break;} } return f;}int main(){ scanf("%d%d",&n,&s); for(int i=s+1;t!=n;i++) { int l=0,y=2; while(l<2&&y<=10) { l+=tear(i,y); y++; } if(l==2) ans[++t]=i; } for(int i=1;i<=t;i++) printf("%d\n",ans[i]); return 0;}
转载于:https://www.cnblogs.com/dfsac/p/7587917.html
说明:以上内容主要包含了一个C语言程序,程序的功能是判断某个数是否为双进制数。如果一个数可以表示为两进制数,那么这个数就会被记录下来。程序的大致流程是:
包含必要的头文件 定义函数tear,用于将一个数拆分成指定进制下的各个位数,并检查这些位数是否成回文 在main函数中读取输入参数,遍历从s+1到n的所有数 对每一个数,使用tear函数分别计算其在不同进制下的位数 如果某个数在某个进制下的位数为2,则将该数记录下来 最后将所有满足条件的数按顺序输出 这个程序的实现思路相对直接,但如果需要优化,可以通过增加缓存机制、优化进制转换的算法等方式来提升性能。