找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 71402|回复: 20

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

[复制链接]
发表于 2011-7-1 15:17:04 | 显示全部楼层 |阅读模式
平常我们是用set /a Anwser=11*11*11*11*11*11*11*11*11*11*11来表示11个11相乘,
但是这样写起来显得很罗索,
那么有没有更简单以及最简单的表达方式呢?
发表于 2011-7-1 15:56:45 | 显示全部楼层
你听说过for么
 楼主| 发表于 2011-7-1 16:04:12 | 显示全部楼层
2# Demon
for有一个set /a算式简洁?
发表于 2011-7-1 16:13:03 | 显示全部楼层
本帖最后由 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就行了
写简单了,但要口算更长时间才能写出算式呵

评分

参与人数 2PB +5 技术 +2 收起 理由
zm900612 + 5 + 1 出人意料的好思路!
ArdentMan + 1 学习了

查看全部评分

 楼主| 发表于 2011-7-1 16:15:54 | 显示全部楼层
学习了,谢谢了!

但是如果这个11是变量呢,后面的加乘怎么得来?
发表于 2011-7-1 16:18:23 | 显示全部楼层
5# ArdentMan

你是要求某数的幂次方吧,那要用另一个公式来算这个数是2的几次方余多少的问题
 楼主| 发表于 2011-7-1 16:22:36 | 显示全部楼层
如此还不如:
set /a Anwser=11
for /l %%i in (1,1,%Anwser%) do set /a Anwser*=Anwser
发表于 2011-7-1 16:35:30 | 显示全部楼层
你的算法是错误的,如果是11个,应该这么写

  1. set a=11
  2. for /l %%i in (1 1 10) do set /a a*=11
复制代码
循环1次就是2个11,循环11次就会是12个11。
发表于 2011-7-1 16:42:35 | 显示全部楼层
8# Hello123World


不如把 (1 1 10) 改成 (2 1 11)
发表于 2011-7-1 17:01:33 | 显示全部楼层
@echo off
set str=###########
set /a c=%str:#=11*%1
echo %c%
pause


批处理算出的结果好像不对…… 数值超过范围了是不
发表于 2011-7-1 17:11:14 | 显示全部楼层
本帖最后由 mxxcgzxxx 于 2011-7-1 17:17 编辑

7# ArdentMan

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


将自己的再次简化下
  1. set /a c*=(c*=(c*=(c=11)))*c/11
复制代码
 楼主| 发表于 2011-7-1 17:16:01 | 显示全部楼层
11# mxxcgzxxx
哦,是的,那要多设置一个变量了,

粗心了~~~~~~~~~~~~~~~
发表于 2011-7-1 17:29:01 | 显示全部楼层
本帖最后由 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
 楼主| 发表于 2011-7-1 17:33:11 | 显示全部楼层
版主的思路另类,但好像有点不对吧?
发表于 2011-7-1 17:51:55 | 显示全部楼层
刚刚代码没有考虑周全,已经修改。
也可以用单条set写出兼容 1~9 次方的函数,虽然高效,但是写起来太长了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:33 , Processed in 0.022880 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表