本帖最后由 plp626 于 2011-6-25 22:43 编辑
前言:任意给定一个整数,如何快速生成一个文件,使得这个文件的体积等于这个整数值?- for /l %%a in (1 1 整数值)do set/p=A<nul>>file.txt
- :: 算法复杂度O(n)
复制代码
- :: 如果整数值小于64*1024那么这个最速
- :: 算法复杂度O(1)
- more /t整数值 tab1.txt>file.txt
复制代码 想到了N等分点的问题,并将这个算法用于生产空文本文件:
算法的复杂度为O(log(n));- :: 生成空文件
- :: 功能相当于 fsutil file createnew 文件名 字节数(fsutil 需要管理员权限)
- :: 算法:二分法
- :: 外部命令依赖: findstr(调用1次;用于生成ASCII 码0x00的字符)
- :createnew <filename> <num> //by plp626
- setlocal EnableDelayedExpansion
- cmd/u/cecho.>0.tmp
- findstr/vrc:$ 0.tmp>1.tmp
- Set/a a=%2&if !a! leq 0 set/p=<nul>"%~2"&exit/b
- Set t1=+1.tmp&Set t0=&Set s=
- for /l %%a in (1 1 30)do if !a! GEQ 2 (
- set/at=a%%2,a/=2&Set "s=" "$+$ $2" "$2^!t!t!^! $!s!"
- )
- for %%a in ("1.tmp $.tmp!s:$=$.tmp!")do copy/b %%~a>nul
- if exist "%~1" del/a "%~1"
- ren $.tmp "%~1"
- del 0.tmp 1.tmp $.tmp $.tmp2
- endlocal&goto:eof
复制代码 如果用16进制的话,更为快速,有兴趣者继续。。。 |