返回列表 发帖

[数值计算] [讨论]如何用最简算式表示11个11相乘

平常我们是用set /a Anwser=11*11*11*11*11*11*11*11*11*11*11来表示11个11相乘,
但是这样写起来显得很罗索,
那么有没有更简单以及最简单的表达方式呢?

你听说过for么

TOP

2# Demon
for有一个set /a算式简洁?

TOP

本帖最后由 mxxcgzxxx 于 2011-7-1 16:16 编辑
set /a a*=(a*=(a*=(a=11)))*11*11*11COPY
原理是递归,第一层11,第二层11*11,第三层(11*11)*(11*11)
所以a*=(a*=(a*=(a=11)))就是8个11相乘了,加乘三个11就行了
写简单了,但要口算更长时间才能写出算式呵
2

评分人数

世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

学习了,谢谢了!

但是如果这个11是变量呢,后面的加乘怎么得来?

TOP

5# ArdentMan

你是要求某数的幂次方吧,那要用另一个公式来算这个数是2的几次方余多少的问题
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

如此还不如:
set /a Anwser=11
for /l %%i in (1,1,%Anwser%) do set /a Anwser*=Anwser

TOP

你的算法是错误的,如果是11个,应该这么写
set a=11
for /l %%i in (1 1 10) do set /a a*=11COPY
循环1次就是2个11,循环11次就会是12个11。

TOP

8# Hello123World


不如把 (1 1 10) 改成 (2 1 11)

TOP

@echo off
set str=###########
set /a c=%str:#=11*%1
echo %c%
pause


批处理算出的结果好像不对…… 数值超过范围了是不
[url=][/url]

TOP

本帖最后由 mxxcgzxxx 于 2011-7-1 17:17 编辑

7# ArdentMan

不只是循环12次的原因还有每次都是自己的平方,第一次之后就全错了


将自己的再次简化下
set /a c*=(c*=(c*=(c=11)))*c/11COPY
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

11# mxxcgzxxx
哦,是的,那要多设置一个变量了,

粗心了~~~~~~~~~~~~~~~

TOP

本帖最后由 zm900612 于 2011-7-1 17:42 编辑
@echo off
set "n=m*!!8*m*!!7*m*!!6*m*!!5*m*!!4*m*!!3*m*!!2*m*!!1*m"
setlocal enabledelayedexpansion
for /l %%a in (1 1 9) do (
set /a m=%%a,"num=!n:*%%a*=!"
echo !num!
)
pauseCOPY
set m=9
for /f "tokens=%m%* delims=/" %%a in ("1/m/m/m/m/m/m/m/m/1") do set /a "n=m*m*m*m*m*m*m*m*m/%%b"
echo %n%
pauseCOPY
修改了下bug

TOP

版主的思路另类,但好像有点不对吧?

TOP

刚刚代码没有考虑周全,已经修改。
也可以用单条set写出兼容 1~9 次方的函数,虽然高效,但是写起来太长了...

TOP

返回列表