四则运算 - wenzhoullq/leetcode GitHub Wiki

加法

加法求和模板

套模板就完事了

 int carry=0;
    while(l1!=null||l2!=null){
        int v1=l1==null?0:l1.val;
        int v2=l2==null?0:l2.val;
        ListNode temp=new ListNode((v1+v2+carry)%10);
        carry=(v1+v2+carry)/10;
        p.next=temp;
        p=p.next;
        if(l1!=null) l1=l1.next;
        if(l2!=null) l2=l2.next;
        }
    if(carry!=0){
            ListNode temp=new ListNode(1);
            p.next=temp;
        }
    return dummy.next;

题目

2. 两数相加

66. 加一

67. 二进制求和

445. 两数相加 II

989. 数组形式的整数加法

快速乘法模板

模板

      long ans = 0;
        while (k > 0) {
            if ((k & 1) == 1) ans += a;
            k >>= 1;
            a += a;
        }
        return ans;

题目

29. 两数相除

乘法

模板

类似于加法模板,不过需要先确定长度。

        for(int i=len1-1;i>=0;i--){
            int carry=0;
            int c1=num1.charAt(i)-'0';
            for(int j=len2-1;j>=0;j--){
                int c2=num2.charAt(j)-'0';
                int temp=ans[i+j+1]-'0';
                ans[i+j+1]=(char)((temp+c1*c2+carry)%10+'0');
                carry=(temp+c1*c2+carry)/10;
            }
            ans[i]=(char)(carry+'0');
        }

43. 字符串相乘

快速幂

模板

        double ans=1;
        while(n!=0){
            if((n&1)==1) ans*=x;
            x=x*x;
            n>>=1;
        }
        return ans;

50. Pow(x, n)