[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [讨论]如何用最简算式表示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 编辑
  1. set /a a*=(a*=(a*=(a=11)))*11*11*11
复制代码
原理是递归,第一层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个,应该这么写
  1. set a=11
  2. for /l %%i in (1 1 10) do set /a a*=11
复制代码
循环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


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

TOP

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

7# ArdentMan

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


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

TOP

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

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

TOP

本帖最后由 zm900612 于 2011-7-1 17:42 编辑
  1. @echo off
  2. set "n=m*!!8*m*!!7*m*!!6*m*!!5*m*!!4*m*!!3*m*!!2*m*!!1*m"
  3. setlocal enabledelayedexpansion
  4. for /l %%a in (1 1 9) do (
  5. set /a m=%%a,"num=!n:*%%a*=!"
  6. echo !num!
  7. )
  8. pause
复制代码
  1. set m=9
  2. 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"
  3. echo %n%
  4. pause
复制代码
修改了下bug

TOP

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

TOP

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

TOP

返回列表