三行代码实现大数相乘
马上要蓝桥杯比赛了,想背一下代码模板,无意中看到了一个四行实现大数阶乘的,就想试试能不能把大数相乘也给精简一下。直接放代码:
string mul(string a,string b){
int i=a.size()-1,j=b.size()-1,k,temp=0;string ans(a.size()+b.size(),'0');
for(;j>=0?:(--i,j=b.size()-1,i>=0?:0);--j){
(temp=ans[i+j+1]-'0'+(a[i]-'0')*(b[j]-'0'))>10?(ans[i+j]+=temp/10):1;
ans[(i+j+1)]=temp%10+'0';}
return ans=ans.substr(ans.find_first_not_of('0'));
}
如果除去定义变量和return的话,只有三行了。
然后,里面有个坑,for里面判断的部分啊,之前写的是
for(;i>=0?(j>=0?:(j=b.size()-1,--1):0;--j)
是不对的,首先i>0的判断应该放在j后面判断,然后–1,也不应该放在逗号运算符的最后,放在最后会返回它的值,比如说i=1,自减之后返回了0,直接结束for循环。
记录一下,第一次发表。