两个简单数学问题的精巧算法

      问题一:输入一个数字,将该数字逆转并输出。例如输入:123456789 输出:987654321

      



1. //精巧算法1:数字的逆转   
2. int reserve(int a){
3. int b=0,t=a;
4. while(t){
5. b*=10;
6. b+=t%10;
7. t/=10;
8. }
9. return b;
10. }
11. //算法应用:判断是否是回文数,a=reserve(a),则说明该数字是回文数

     

       问题二:输入一个数字n,求其约数个数。例如输入:10 输出:4

      



1. //算法:求解整n的因子个数   
2. #define Max 5001
3. int cnt[Max];//cnt[i]表示整数i的约数个数
4. void get_cnt(){
5. sizeof(cnt));
6. for(int i=1;i<Max;i++)
7. for(int j=i;j<Max;j+=i)
8. cnt[j]++;
9. }
10. //当让你可以通过素因子来求解总约数的个数,相对会高效些
11. //但但是上述方法确实实现起来太简单了