数学类的题(2021-7-13)

这篇博客探讨了两种高效的编程算法:一是计算整数二进制表示中1的个数,通过移位操作实现;二是实现双精度浮点数的次方计算,考虑了正负指数的情况。文章详细阐述了算法思路并提供了Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.二进制中1的个数

public class Solution{
   public int NumberOf1(int n){
   int count=0;
   while(n!=0){
       count++;
       n=(n-1)&n;
     }
     return count;
   }
}
思路:直接将整数看成二进制,然后采用移位的方法

2.数值的整数次方

public class Solution{
   public double Power(double base,int exponent){
     double res=0;
     if(equal(base,0)){
     return 0;
     }
     if(exponent==0){
     return 1.0;//任何数的0次方都为1
     }
     if(exponent>0){
          res=mutiply(base,exponent);//当次方为正
     }else{
          res=mutiply(1/base,-exponent);//当次方为负
     }
     return res;
   }
   public boolean equal(double a,double b){
      if(a-b<0.000001&&a-b>-0.00001){
      return true;
      }
      return false;
   }
}
思路:1.任何数的0次方都为12.当次方为正时,res=mutiply(base,exponent)
      3.当次方为负时,res=mutiply(1/base,-exponent);

3.整数中1出现的次数

import java.util.*;
public class Solution{
   public int NumberOf1Between1AndN_Solution(int n){
     int count=0;
     for(int i=1;i<=n;i*=10){
       int a=n/i;
       int b=n%i;
       count+=(a+8)/10*i;
       if(a%10==1){
       count+=b+1;
       }
     }
     return count;
   }
}
思路:分别计算个位、十位、百位...上出现1的个数。
1.个位上(1~n)共出现(n/10+11.
2.十位上(n/10)个位上的1的个数然后乘10.
3.都是加8进位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值