四则运算 - 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;
题目
快速乘法模板
模板
long ans = 0;
while (k > 0) {
if ((k & 1) == 1) ans += a;
k >>= 1;
a += a;
}
return ans;
题目
乘法
模板
类似于加法模板,不过需要先确定长度。
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');
}
快速幂
模板
double ans=1;
while(n!=0){
if((n&1)==1) ans*=x;
x=x*x;
n>>=1;
}
return ans;