两个简单数学问题的精巧算法
问题一:输入一个数字,将该数字逆转并输出。例如输入:123456789 输出:987654321
- //精巧算法1:数字的逆转
- int reserve(int a){
- int b=0,t=a;
- while(t){
- b*=10;
- b+=t%10;
- t/=10;
- }
- return b;
- }
- //算法应用:判断是否是回文数,a=reserve(a),则说明该数字是回文数
问题二:输入一个数字n,求其约数个数。例如输入:10 输出:4
- //算法:求解整n的因子个数
- #define Max 5001
- int cnt[Max];//cnt[i]表示整数i的约数个数
- void get_cnt(){
- memset(cnt,0,sizeof(cnt));
- for(int i=1;i<Max;i++)
- for(int j=i;j<Max;j+=i)
- cnt[j]++;
- }
- //当让你可以通过素因子来求解总约数的个数,相对会高效些
- //但但是上述方法确实实现起来太简单了