### Perl: Math::BigInt

Math::BigInt提供了非常多方法，而且很多方法也有对应的运算符重载，支持bin, oct, dec, hex格式字符串与BigInt之间的相互转化，几乎没有不支持的操作，包括三角函数，二项式系数都有。不过Math::BigInt有很多不同的实现，其中最快的是Math::BigInt::GMP，效果还是非常理想的，但是默认的Math::BigInt::Calc就慢得不能忍了，远比php, java, ruby, python的都要慢。另外Math::BigFloat是基于Math::BigInt的高精度浮点数。

```use Math::BigInt lib => 'GMP';
use Math::BigFloat try => 'GMP';
print Math::BigFloat->bpi(64), "\n"; # 3.14...
my \$x = new Math::BigInt('0x123456789abcdef');
my \$y = Math::BigInt->new('0b101010101010101');
print \$x + \$y, "\n";
print join(":", \$x->copy()->bdiv(\$y)), "\n";
```

### Bash: bc

```#!/usr/bin/bc -q

define e(n) {
auto i, p, s;
p = 10 ^ n;
s = 2 * p;
for (i = 2; p > 0; ++i) {
p /= i;
s += p;
}
return s;
}

print "input a integer: "
e(x)
quit

# input a integer: 40
# 27182818284590452353602874713526624977552
```

### Php: BCMath

bc是Binary Calculator的

SPOJ24. Small factorials[FCTRL2]就是阶乘计算加高精度运算。以下是用内置大数支持的perl, php, java, ruby, python, haskell, bash, scheme等语言实现的代码。

```main = interact \$ unlines . map (\i -> show \$ f !! read i) . tail . words
where f = scanl (*) 1 [1 ..]
```

### perl

```#!/usr/bin/perl -w

use strict;
use Math::BigInt lib => 'GMP';

my @f = ();
push @f, Math::BigInt->new(1);
for (my \$i = 1; \$i <= 100; ++\$i) {
push @f, \$f[\$#f]->copy()->bmul(\$i);
}
chomp(my \$re = <STDIN>);
for (my \$ri = 1; \$ri <= \$re; ++\$ri) {
chomp(my \$n = <STDIN>);
print "\$f[\$n]\n";
}
```

### php

todigits是将验证码图像文件转换成每个数字的二值图像的函数。首先将验证码转为灰度图，再选择合适的阀值，将图像二值化。最后把每个数字裁剪出来并去掉白边。硬编码万岁！

```# todigits.pl
use strict;
use Image::Magick;

sub todigits {
my (\$n, \$threshold, \$w, \$h, \$x, \$y) = /该信息已被绿坝屏蔽/;
my \$filename = shift @_;
my @retval = ();
my \$image = Image::Magick->new;

\$image->Quantize(colorspace => 'gray');
\$image->Threshold(threshold => \$threshold, channel => 'All');
for (my \$i = 0; \$i < \$n; ++\$i) {
my \$digit = \$image->Clone();
\$digit->Crop(width => \$w, height => \$h, x => \$x + \$i * \$w, y => \$y);
\$digit->Trim();
push @retval, \$digit;
}
return @retval;
}

1;
```

C

```/* A + B Problem in C */
#include <stdio.h>

int main(void) {
int a, b;

while (scanf("%d%d", &a, &b) != EOF) {
printf("%d\n", a + b);
}

return 0;
}
```

mandigo是一个在我看来非常不错的主题，首先它是fixed-width的，这样可以有效逃避自己精心打扮的blog在别人浏览器里崩掉的悲剧。它的定制性也不错，本身就有好几套不同的配色可以选择，还支持随机配色，不过我当然是毫不犹豫地选了现在的这个pink配色。最主要的还是对title和background图片个性化的支持。title的图片也支持随机功能，只要把备选图片放到指定目录下就可以了，都不用自己来实现了。

```for i in `seq \$1`
do
mplayer -ss \$i -noframedrop -nosound -vo png -frames 1 /media/temp/VIDEO_TS/VTS_02_1.VOB
mv 00000001.png \$i.png
done```

```#!/usr/bin/perl -w

use strict;
use warnings;
use Image::Magick;

for my \$file (@ARGV) {
my \$image = Image::Magick->new;
\$image->Crop(
width => 700, height => 400,
x => 80, y => 50);
\$image->Scale(
width => 420, height => 240);
\$file =~ s/png\$/jpg/;
\$image->Write(\$file);
}```

```#!/usr/bin/perl -w

use strict;
use warnings;
use Image::Magick;

sub randfile() {
return sprintf '%08d.jpg', 15 + int rand 227;
}

srand;
my \$n = 16;
my \$size = sprintf '420x%d', 240 * \$n;
print \$size;
my \$image = Image::Magick->new;
\$image->Set(size => \$size);