三行代码实现大数相乘

三行代码实现大数相乘

马上要蓝桥杯比赛了,想背一下代码模板,无意中看到了一个四行实现大数阶乘的,就想试试能不能把大数相乘也给精简一下。直接放代码:

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循环。
记录一下,第一次发表。

发布了1 篇原创文章 · 获赞 4 · 访问量 86

猜你喜欢

转载自blog.csdn.net/Tiooo111/article/details/104597557