- 论坛徽章:
- 145
|
本帖最后由 jason680 于 2015-12-30 15:51 编辑
回复 5# substr函数
awk for multiply with bignum
$ echo 12345678901234567890 12345678901234567890 | awk '{print $1*$2}'
152415787532388344689912330787336749056
$ echo 12345678901234567890 12345678901234567890 | awk -f bigint.awk
152415787532388367501905199875019052100
$ echo 12345678901234567890*12345678901234567890 | bc
152415787532388367501905199875019052100
$ cat bigint.awk
function abs(n){
return n>=0 ? n : -n
}
function get_num(num, pos){
len = length(num)
if(abs(pos) > len || pos == 0)
return(0)
pos = (pos>0) ? pos : len+pos+1
return substr(num, pos, 1)
}
function mul(n1, n2, len1,len2,len,n,ret){
len1 = length(n1)
len2 = length(n2)
len = len1 + len2
delete a
for(c1=1; c1<=len1; c1++){
for(c2=1; c2<=len2; c2++)
a[c1+c2-1] += get_num(n1,-c1) * get_num(n2,-c2);
}
for(n=1; n<=len; n++){
ret = a[n]%10 ret
a[n+1] += int(a[n]/10)
}
sub(/^0+/, "", ret)
return ret
}
{
print mul($1, $2)
}
|
评分
-
查看全部评分
|