记录一下做过的题目#1
将一个数的数码倒过来所得到的数叫做原数的反序数,如果一个数等于它的反序数,则称它为对称数。编写程序,采用递归算法求不超过1993的最大的二进制的对称数。【C++】
暂时不会用递归算法,先用最简单的方法试试看,期待他可以运行的程度。
#include <iostream>
#include <cmath>
using namespace std;
long long bin(long long dec)
{
long long d, i=0;
long long bi=0;
while(dec!=0)
{
d=(dec%2)*pow(10,i);
bi=bi+d;
dec=dec/2;
i=i+1;
}
return bi;
}
int dui(long long bi)
{
long long d=0,b=bi;
while(b!=0)
{
d=d*10+b%10;
b=b/10;
}
if(d==bi)
return 1;
else
return 0;
}
int main()
{
long long a;
long long b;
int flag;
for(a=1993;a>=0;a--)
{
b=bin(a);
flag=dui(b);
if(flag==1)
{
cout<<a<<endl<<b<<endl<<flag<<endl;
break;
}
}
return 0;
}
查一下怎么做出递归算法再修改一下。
之前试了一下用int的话会出现乱码……但其实也知道都用long会导致程序运行变慢。
有什么方法可以变得更好呢。