Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
```python
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Environment
.env
.env.local
*.env.*

# IDE
.vscode/
.idea/
*.swp
*.swo

# Logs
*.log

# Temp files
*.tmp

# Coverage
.coverage
coverage/
htmlcov/

# Distribution / packaging
.Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
```
112 changes: 112 additions & 0 deletions calculate_pi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
import math
import time
import sys

def calculate_pi_chudnovsky(digits):
"""
使用 Chudnovsky 算法计算圆周率到指定的小数位数。
该算法收敛速度极快,每项增加约14位精度。
"""
# 设置精度:额外多算几位以防舍入误差
extra_digits = 10
total_digits = digits + extra_digits

# 设置十进制上下文精度
try:
from decimal import Decimal, getcontext
getcontext().prec = total_digits
except ImportError:
print("错误: 需要 'decimal' 模块 (标准库自带)")
return None

ONE = Decimal(1)
ZERO = Decimal(0)

# Chudnovsky 公式常数
# 1 / pi = 12 * sum( (-1)^k * (6k)! * (545140134k + 13591409) / ((3k)! * (k!)^3 * (640320)^(3k + 3/2)) )

C = 426880 * Decimal(10005).sqrt() # 640320^(3/2) / 12 的变体处理,这里直接构造最终公式

# 简化公式实现:
# pi = C / sum(...)

K = 6
M = 1
L = 13591409
X = 1

SUM = Decimal(L)

# 估算需要的迭代次数: 每次迭代约增加 14.18 位精度
iterations = int(digits / 14.2) + 2

print(f"开始计算 {digits} 位圆周率...")
print(f"预计迭代次数: {iterations}")

start_time = time.time()

for k in range(1, iterations + 1):
M = (M * (K**3 - 16*K) * K**2) // (k**3)
L += 545140134
X *= -262537412640768000

term = Decimal(M * L) / Decimal(X)
SUM += term

# 简单的进度指示 (每10%打印一次,避免过多IO影响性能)
if k % (max(1, iterations // 10)) == 0:
elapsed = time.time() - start_time
print(f"进度: {k}/{iterations} ({(k/iterations)*100:.1f}%), 耗时: {elapsed:.2f}s")

pi = C / SUM

end_time = time.time()
print(f"计算完成,总耗时: {end_time - start_time:.2f}秒")

# 格式化为字符串,去掉 '0.' 和小数点后的多余部分
s = str(pi)
# 移除 "0."
if s.startswith("0."):
s = s[2:]
elif s.startswith("3."):
s = s.replace(".", "")

# 确保长度正确
return s[:digits]

def main():
# 设置目标位数
# 注意:2亿位 (200_000_000) 在此环境中极大概率会超时或内存溢出。
# 为了演示程序有效运行,默认设置为 10,000 位。
# 如需测试更大数值,请修改此处,但建议在本地机器运行。
TARGET_DIGITS = 10000

if len(sys.argv) > 1:
try:
TARGET_DIGITS = int(sys.argv[1])
except ValueError:
print("参数必须是整数")
return

print(f"任务:计算圆周率的前 {TARGET_DIGITS:,} 位")

if TARGET_DIGITS > 1000000:
confirm = input(f"警告:计算 {TARGET_DIGITS:,} 位可能需要很长时间。继续?(yes/no): ")
if confirm.lower() != 'yes':
print("已取消。")
return

pi_str = calculate_pi_chudnovsky(TARGET_DIGITS)

if pi_str:
output_filename = f"pi_{TARGET_DIGITS}_digits.txt"
print(f"正在写入文件 {output_filename} ...")

with open(output_filename, 'w') as f:
f.write(pi_str)

print(f"成功!前 {TARGET_DIGITS:,} 位已保存至 {output_filename}")
print(f"前100位预览: 3.{pi_str[:100]}...")

if __name__ == "__main__":
main()
1 change: 1 addition & 0 deletions pi_10000_digits.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3141592653591859316259287492852467460785825758821684888977152619007750174372804542266347581469841836674954346557536377633446645946895392911787540788327069796100704268118920432425987334865340499791956882790423447489434261424074806315974776937288585164695000134956574014669173578696537709594999566655411274414496246993771785904113906247327932036425517682124446056307094262634377673753677723275179994681824335300232430844674195385121794426547426119837870527378359129569865519520217161074826038019698460519350750309877103473772746082338535274663430396040949520755447580969705016540877141098792623375906313904594644442526623147907635976918412322346061715035790787174908801869040032560416072739383895081093888751574213811529049368784617313997001877860014823262377743040950995329936728567633228832630688922591611584384782713278475011106969244698938504749998189305779392732022030369028430383373636841408074867134240974058305836594998061398260409999479928310918370503478301708347099093265747981118308874862160020028748513030664282115557691256691954194910538461868801586361957126318075447792322125200939289933304267103551587830515468498774679675627235311221901952067374871323621313376670972924609711487703546613217180135798100605498878841806568720141019041674900776427754455133876896191466050536436176650335741629502272303988092977666649401617797047724359350471423370494587375282919856907801235704189000111967502407375016119185253889546090104517371406401919479584151586618326745654645428013616034901824789075674250903761017129776010363461187979305080265107829380994121882226779511926398237161801025233772282564499940041065995990852520664070062395351936382440135126971247774084724192591766552525455514436315421513506129573912198408628800278055496381020731587624527294837044952279708487202791011737544176886795218444949974527396473677482676463575233439539920691999596991632844454308091225246277493618150029567941427990462156226772641263664118592439092116818143509941192518483663685585789812253501391722940273956628865225227102412437969472197748604919979704459791213318902180811567097640591743060357445095064279699516545457624916154995535390369204993641831521396952441969765732032479785222202240607105326962436880092952515005470938785013611510862681768904573158987653847001140552999655562061162527487426107442126071462220848775193886051278464046450116664061470154533031963028781578553878889430558858362833475413950178852788823653559714351390622989529290544414311055426365059710466614115633480059095891895994440204644111353674771685380469279204627613060672762567975692358049650726428118951576474866934233033276069082684675254591535091806996643779461092676463796781264617680315593794428177750583398047897865044490886978537966651719856934718499242762457644556444412660020575654935586980505481504361603559203973499046545429782300507070095197866999539031890698172177850550866942051300938174027470790296258023903499888937339204953482948981015745201003689790121642397587050502383026524857355736801421448657354725572925858230561679087017844501546247278027099849343829175422447898353959667514871775183107875487653785570184919997274899152424854925851150782493484724964185268795361681502838174990091020847386189855615705156830864618945247589576107959854758625594072117966238827675207019559391532554454663254021745304455000433823747360242827776869197931716015716676226184906437339628759890706493547016423117685261170750800108992094175653299355639286586634373664386165648298378109726505018762360002211182528950411734199749415779798315498682011946232574846734601173169578808356870012500183919257028113449433977254412097609445833091059043176134428241989934116790651960348144277385155675357356997842847027881586640673497209817367140317413881741565408652318432883865266206414059402122823542063554001103566492129106957382596292509999993040244753777929315708672220847691313386133895347301794627388266373042179169813799389745971863525100337912381385651865249054571088911354798919711442262970416182675638959310738010585599396338344882159257023536969189345962866547467844129362208321109121144625618264283901640535953082605419057233932603147637403182762160713027431456784500173370062621171420656138760462134376895483057117944238865177348945359275582319986713452158849242392977102407726386321167793243490600076032024626790131080943059477924553499087219757909041756400207512047901293917585481143054102136817836693426260559005652023850985910536194765115710720427208757578444281274629016672316064242741988801627140561582729221636130294769164162351075285112221691089600166531666861374006320092472154231170571772596245435359315530989824806407339307268071533308499540272192215654057133272656861018073721084372756445037584214759959766734915871315772176871907206744074439876848303312130351988317017636472561888992648087910384971393489201877299024585288573230343051599789813965487148652456393823096835073144149695344604905626200375809321870496708881146797309635173475784989348844592950882411113732380485912997809419132274315096428572104179312801948955282775175702100613140672037398108113151364172211023750401863065512975896077013864364834032743438953269498542751971307175195831694384105189617205935464237685711514700356919871874817183559603031737645072085350282049752094391886281204019022990479628295004615042503623604093090181978084174688747521179749103482466748340593492554448763175240593873009483181423157668140408068032082952545030856123616299525030279296567115993326318412819754720056248212612572178334241709929429547058170906805928324600679645922521869489821391918226466384273982633329725770589878592175091028194613619286277226872199437878218303419602757142696770494735002391381954090422944035415684968754004549442783080953510994649913056815880251465008716961948450130382304467448045891246125666412692002975006205944444771943918073455613757992473941220632752305223122734060081168661104295596856600502958433936269482218554288136752021125334545760956946426113656217311547247597412538441386314883910511377236091165981541893798888007640857209930744977986267276046711822234039130881024423680524196349862123409061802151846999051628647858654422550450252231639597683382853906964829509884713872195393709085690941691206401651548728755656726188432767233235814122259745316034794741163510717254303458959473856176051171607029060643011567654807358145226144338635379117820351029845916933958839604641516810129568933609340988666881496665022960167219543606493325769351075986081981338512381333626326164324329946037358752940643146729232866161555121022032793201538790101767508711346107029295892900241436519816515238423209536332530824611144206632644357795675841452317708312177106372139618731720106901713119246659495341301511558638236223451249946967553940132090248430383307480663675816140210856699216866174410466818990563239006159203052117590126151092435020404408249086659726980360056244442946462041809799085520137137646617752139747195574147759431093160893470983193619041189873235233702397720341514345019129254547067867731272221793419568514561975509067465050661792186762106675712100319353605951670454659084860207308606528110731836677433003757972175440938307247022692656835667798563276083130792607318602954908054282155500695703676522494966656759054257220693000077167421426494372915861187243513810974283594300096101848268432590632281152921190651434910390851100614834955854623150547812613105640096990915657924688773145396339054803918689837106240043441582030487273880888065234377428711770319316210193674132389686896723080320704611956093041302108492009860766501164178628519454945392598594513028743040875001327786495419374345425210339021628322747390696835170038292675704864871492377366707695083822132294555117655353045320685389255674712217096479121593070534983035076989062570619332499377481998694105367925392719610683437063258406152468855343621369659691683398115340806405380481180819942691608183503161054246296907530824723797149094362921554070311997896723215440082612786979364791497535192784366391096545323429980888823035158147409905877170873499001767847678151185689178739489585884513564296253534565749641475653034113324655867959858016089597905825446811115181039547379397214610568147507159256655099521162843803921028836038344312720943514735680190867172241454561676721603769836684648264119745199937480426892581862477578793987869694394668534310494755342579884814907491963259618705242795324654165180204545610106181316504287169411022999688663298844225773732925706020896953973435120717621431120119152846909953657644859200579882589863161018554663292916433254182198895160022131856440045651693598085070089676956598608179355109470454073547275563678250969983218608592774353244565654041012760029069964486968768714689637879906673387148579263905836847321476499691655839945529960921345054966399747730262464721271733422947700317259087482900359410819419831672618797859066577646698685181221254060177504975030550594675570284109285953893970889877818859096322215170988319986179885484421319164698184358788564805591679702960025753264322314556413667040967875642052580942755647406046693514879522415508688536772016725374524398184443891168236935737423961628018986958213186467756174733571521856200701210180210574895537600792677570602264722290599504459834358699780548285493963370757403990733656411020150942435087240081762041647213144704337837704269331729228604318767244350166761982527783543122204311716013625233034425662994593023846005514898724329635966876198704496265595768267890589935245510025744395178154698534067823409575039801429594352927648161724644021150322139497529480710277842521379764184285538325410891014577994407239197178625548154314861486478127656730926639842803741494495172411964887559255939675125890430174152521914683297838685202369053238476443075801210843242912580240371563757725346683419858879684341615228040152483452818277802389142704110270408102385027667222991090840369673596680829910308104712876519364956410903514370454414242937163917219449811809243821849140303305454809925406967864826632226210298980623521788075641355934075617040063961807595430791340455601455423324139728091151
21 changes: 21 additions & 0 deletions test_algorithms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# 算法测试题

## 1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。

示例:
输入: nums = [2,7,11,15], target = 9
输出: [0,1]

## 2. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

## 3. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。

## 4. 合并有序数组
给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n,分别表示 nums1 和 nums2 中的元素数目。
请你合并 nums2 到 nums1 中,使合并后的数组同样按非递减顺序排列。

## 5. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
36 changes: 36 additions & 0 deletions test_data.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"users": [
{
"id": 1,
"name": "张三",
"email": "zhangsan@example.com",
"age": 28,
"department": "技术部",
"skills": ["Python", "Java", "JavaScript"],
"active": true
},
{
"id": 2,
"name": "李四",
"email": "lisi@example.com",
"age": 32,
"department": "产品部",
"skills": ["产品设计", "数据分析", "项目管理"],
"active": true
},
{
"id": 3,
"name": "王五",
"email": "wangwu@example.com",
"age": 25,
"department": "设计部",
"skills": ["UI设计", "UX设计", "Figma"],
"active": false
}
],
"metadata": {
"total_count": 3,
"active_count": 2,
"generated_at": "2024-01-15T10:30:00Z"
}
}
84 changes: 84 additions & 0 deletions test_html.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试页面</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 50px auto;
padding: 20px;
}
.card {
border: 1px solid #ddd;
border-radius: 8px;
padding: 20px;
margin: 10px 0;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<h1>前端能力测试页面</h1>

<div class="card">
<h2>待办事项列表</h2>
<input type="text" id="todoInput" placeholder="输入待办事项...">
<button onclick="addTodo()">添加</button>
<ul id="todoList"></ul>
</div>

<div class="card">
<h2>计数器</h2>
<p>当前计数:<span id="count">0</span></p>
<button onclick="increment()">增加</button>
<button onclick="decrement()">减少</button>
<button onclick="reset()">重置</button>
</div>

<script>
// 待办事项功能
function addTodo() {
const input = document.getElementById('todoInput');
const list = document.getElementById('todoList');
if (input.value.trim()) {
const li = document.createElement('li');
li.textContent = input.value;
list.appendChild(li);
input.value = '';
}
}

// 计数器功能
let count = 0;
function updateCount() {
document.getElementById('count').textContent = count;
}
function increment() {
count++;
updateCount();
}
function decrement() {
count--;
updateCount();
}
function reset() {
count = 0;
updateCount();
}
</script>
</body>
</html>
Loading