信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 4323|回复: 10
打印 上一主题 下一主题

[『C++图文教程』] C++ 高精度计算阶乘真正高级实例教程一看就能懂

[复制链接]

1868

主题

1878

帖子

1万

积分

积分
10928
跳转到指定楼层
宣传软件楼主
发表于 2017-6-26 23:44:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

软件教程首图:

软件教程分类:C++ 图文教程 

软件图文教程视频教程分类:软件图文教程 

软件教程难易程度:软件中级教程 

软件教程发布日期:2017-06-26

软件教程关键字:C++ 高精度计算阶乘真正高级实例教程一看就能懂

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件定制网站 网址:http://www.postbbs.com

软件教程详细描述
本帖最后由 群发软件 于 2017-6-26 23:46 编辑

C++ 高精度计算阶乘真正高级实例教程一看就能懂
利用计算机进行数值计算,基本的运算可以直接使用运算符对数字进行操作,而对于位数达到几十位甚至是上百位的大数字,计算机的计算就没办法满足我们对数字精度的要求,所以我们开始设计程序对此类问题进行解决,那也就是我们的高精度运算。
高精度运算对学生来说本来就是一大难点,高精度的加减法相对比较好理解,而对于高精度的乘除法的理解是比较困难的。高精度运算的思维其实就是按位计算,无论是输入还是输出,对于高精度数字都不是采用数字的方法(数字的类型无法满足),那这个时候我们选择使用字符串进行读取,利用字符串函数和操作运算,将每一位数字取出,存储在字符数组里,也可以直接用循环加数组方法读取。高精度运算经常会出现进位(加法和乘法)和借位(减法)的问题,其实最终的目的都是按位进行计算和输出。


C++ 高精度计算阶乘真正高级实例教程一看就能懂 b2b软件
高精度求N的阶乘,其中N是一个可以以一般整数输入的数字,只是最终的计算结果数字大位数多精度要求高,所以我们必须对结果的每一位上的数字进行精确计算并存储输出。以下是使用C++高精度求N的阶乘的C++程序,我们采用数组a[]来存储运算的结果,其中对于每一个步骤我都有相对应给出解释,不懂得同学可以多看看,自己思考一下。


#include
#include
using namespace std;
int main( )

{
int carry,n,temp,i,j;
int a[20000];
int digit=1;

cout<<"please enter n:"<<endl;
cin>>n;
a[0]=1;   //数组a[]用来存储最终高精度数字的结果 a[0]表示第一位上的数字
for(i=2; i<=n; i++)
{
   for(carry=0,j=1; j<=digit; ++j)
{
temp=a[j-1]*i+carry;  //j从1开始 ,a[j-1]表示的是求第 j位上的数字 ,carry表示进位
a[j-1]=temp;  
carry=temp/10;
}    //经过这重循环求出了第digit-1位上的数字
   while(carry)
{
a[digit++]=carry;   //求出的是第digit位上的数字  
carry/=10;
}
}
cout<<"the result is:"<<endl;
for(int k=digit; k>=1; --k)
cout<<a[k-1];  //按位输出,因为前面多加了一个1,所以从第digit位开始输出
cout<<endl;
return 0;
}
有关阶乘的算法,不外乎两个方面:一是高精度计算;二是与数论相关。
  一、 高精度计算阶乘
  这实际上是最没有技术含量的问题,但是又会经常用到,所以还是得编写,优化它的计算。
  首先看小于等于12的阶乘计算(计算结果不会超出32位范围):
  int factorial(int n) {
  if (n == 1 || n == 0)
  return 1;
  return factorial(n-1)*n;
  }
  这个递归程序简单明了,非常直观,然而一旦n > 12,则超过32位int型的范围出现错误结果,所以上面这个递归程序仅适合n <= 12的阶乘计算,为了计算较大n的阶乘,需要将高精度乘法算法纳入到阶乘计算中来,高精度乘法过程可以如下简单的描述:(其中A * B = C,A[0], B[0], C[0]分别存储长度)
  for (i = 1; i <= A[0]; i++)
  for (j = 1; j <= B[0]; j++) {
  C[i+j-1] += A*B[j];        // 当前i+j-1位对应项 + A * B[j]
  C[i+j] += C[i+j-1]/10;       // 它的后一位 + 它的商(进位)
  C[i+j-1] %= 10;                // 它再取余即可
  }
  C[0] = A[0] + B[0];
  while (C[0] > 1 && C[C[0]] == 0) C[0]--;   // 去头0,获得实际C的长度
  有了这个高精度乘法之后,计算阶乘就可以简单的迭代进行:
  for (i = 2; i <= n; i++) {
  将i转换成字符数组;
  执行高精度乘法:将上一次结果乘上i
  }
  二、 与数论有关
  由于阶乘到后面越来越大,巧妙的利用数论求得一些有趣的数字(数值)等成为阶乘算法的设计点,下面给出几道相关的问题与分析:
  (1)   计算阶乘末尾第一个非0数字:
  这是一个比较经典的问题,比较复杂的算法是利用一个艰难的数学公式,可惜我不会,从网上的资料学习中,整理出下面这个简单易懂的算法:
  观察n!,可以发现在乘的过程中,对于任意 n > 1,n!的末尾第一个非0数字都是偶数。我们只需保留最后一位非零数。当要乘的数中含有因数5时,我们可以把所有的因数5都当作8来乘。这是因为:
  …x2*5=…10(舍)或…60,最后一位非零数为6。而恰好2*8=16,末位为6。
  …x4*5=…70(舍)或…20,最后一位非零数为2。而恰好4*8=32,末位为2。
  …x6*5=…30(舍)或…80,最后一位非零数为8。而恰好6*8=48,末位为8。
  …x8*5=…90(舍)或…40,最后一位非零数为4。而恰好8*8=64,末位为4。
  (对于n > 1时,最后一位不会出现 1, 7, 3, 9,而永远是2, 4, 6, 8的循环出现)
  因此,在迭代作乘法时,主要就是计算因子5的数量,同时可见因子5的个数以4为循环节(即只需要取它的数量对4取模)。那么对于不同情况下的因子5的数量,可以通过res[5][4] = {{0,0,0,0}, {2,6,8,4}, {4,2,6,8}, {6,8,4,2}, {8,4,2,6}}来得到,使用nonzero表示i的阶乘的最后一位,那么:
  如果t是偶数,则直接乘:nonzero = (nonzero[i-1]*t)%10。
  否则nonzero = res[((nonzero[i-1]*t)%10)/2][five];
  其中t是除掉所有因子5的结果,five为因子5数量对4的模。
  (2)。 阶乘末尾有多少个0
  分析发现,实际上形成末尾0,就是因子5的数量,而计算1~n之间包含一个因子i的个数的简单算法就是:
  cnt = 0; while (n) { n /= i; cnt += n; }
  因此,直接将i换成5,就可以得到因子5的数量,也即n!末尾0的数量。
  (3)。 返回阶乘左边的第二个数字
  简单算法:用实数乘,超过100就除以10,最后取个位即可。因为整数部分的个位就是阶乘结果左边的第二个数字。相关题目:
  (4)。 判断数值 m 是否可以整除 n!
  算法:使用素因子判断法
  A. 首先直接输出两种特殊情况:
  m == 0 则 0肯定不会整除n!;
  n >= m 则 m肯定可以整除n!;
  B. 那么就只剩最后一种情况:m > n,我们从m的最小素因子取起,设素因子为i那么可以   求得m的素因子i的个数 nums1;再检查闭区间 i ~ n 之间的数,一共包含多少个素因子i,就可以简单的利用上面(2)中所介绍的数学公式进行计算得到nums2。如果nums2 < nums1,就表示1 ~ n中包含素因子的数量 < 除数m包含素因子i的数量,那么m必然不能整除n!,置ok = false。
  C. 最后:如果 !ok or m > n or m == 0 则不能整除;否则可以整除
  (5)。数字N能否表示成若干个不相同的阶乘的和:
  这里可以选择的阶乘为:0! ~ 9!,实际上这一题与数论无关,与搜索有关。
  分析,由于可供选择的阶乘数量较少,直接可以利用DFS搜索来做:
  A. 首先将0 ~ 9的阶乘作一个表A[10];再设置一个可以组成“和”的数组ans[N]。
  B. 深度优先搜索方法:
  search(n) {
  for(i = n; i <= 9; i++) {
  sum += A;      //求和
  如果sum在ans数组中不存在,则将sum插入到ans[]数组中
  search(n+1);
  sum -= A;       //回溯
  }
  }
  C. 最后对于输入n,就在ans数组中查找是否存在n,如果存在,则表示n可以表示成不同的阶乘和,否则不行。

下面给大家带来的是高精度计算阶乘实例
  #include
  #define MAX 100000
  using namespace std;
  int main()
  {
  int n,a[MAX];
  int i,j,k,count,temp;
  while(cin>>n)
  {
  a[0]=1;
  count=1;
  for(i=1;i<=n;i++)
  {
  k=0;
  for(j=0;j=0;j--)
  if(a[j])
  break;//忽略前导0
  for(i=count-1;i>=0;i--)
  cout<




untoC++各种怪毛病亲是不是也染上了无法解决的事看看这个next万国企业网信息发布软件自动发帖机
回复

使用道具 举报

0

主题

987

帖子

1063

积分

积分
1063
信息发布软件沙发
发表于 2017-6-29 10:14:51 | 只看该作者
。服务非常好。

回复 支持 反对

使用道具 举报

0

主题

648

帖子

677

积分

积分
677
推广工具板凳
发表于 2017-7-1 12:11:43 | 只看该作者
服务超好

回复 支持 反对

使用道具 举报

0

主题

589

帖子

582

积分

积分
582
软件定制开发地板
发表于 2017-7-2 20:25:08 | 只看该作者
很实用,用着很好。辛苦了两天,有技术小哥专业的指导,总算完成了

回复 支持 反对

使用道具 举报

0

主题

606

帖子

599

积分

积分
599
5#定制软件#
发表于 2017-7-6 23:34:52 | 只看该作者
意思,出差一直没顾上。微信平台开发找你们做绝对是正确的选择。服务是值得肯定的,售后也非常到位,技术支持很强大,重点是热心.不厌其烦。不像有些玩技术的那个清高啊,那个沟通难度啊真不是一般的高。

回复 支持 反对

使用道具 举报

0

主题

605

帖子

600

积分

积分
600
6#定制软件#
发表于 2017-7-6 23:36:15 | 只看该作者
,服務員耐心教授,網站成功完成,多謝大家幫忙

回复 支持 反对

使用道具 举报

0

主题

601

帖子

582

积分

积分
582
7#定制软件#
发表于 2017-7-9 12:52:50 | 只看该作者
,非常满意,还会再来的。

回复 支持 反对

使用道具 举报

0

主题

615

帖子

589

积分

积分
589
8#定制软件#
发表于 2017-7-11 21:00:45 | 只看该作者
很快效果也很完美,特别感谢技术加班帮忙制作!@!@~~客服沟通也很愉快,好多不明白的地方客服也都耐心解答,辛苦啦

回复 支持 反对

使用道具 举报

1

主题

608

帖子

594

积分

积分
594
9#定制软件#
发表于 2017-7-15 13:21:59 | 只看该作者
师赞,服务好技术牛

回复 支持 反对

使用道具 举报

0

主题

985

帖子

988

积分

积分
988
10#定制软件#
发表于 2017-7-18 21:49:20 | 只看该作者
不错的教程

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
信息发布软件AIWROK软件苹果UI按钮Button方法示例
AIWROK软件苹果UI按钮Button方法示例
信息发布软件AIWROK软件苹果TAB界面视图示例
AIWROK软件苹果TAB界面视图示例
信息发布软件AIWROK苹果系统自带view视图简洁UI界面示例
AIWROK苹果系统自带view视图简洁UI界面示例
信息发布软件汇集HID安卓输入文字的方法和复制粘贴示例
汇集HID安卓输入文字的方法和复制粘贴示例
信息发布软件AIWROK软件找字与OCR方法汇总示例
AIWROK软件找字与OCR方法汇总示例
信息发布软件AIWROK软件找图方法汇总示例
AIWROK软件找图方法汇总示例
信息发布软件AIWROK软件滑动方法集合示例
AIWROK软件滑动方法集合示例
信息发布软件AIWROK软件安卓AIWROK汇集软件点击
AIWROK软件安卓AIWROK汇集软件点击
信息发布软件苹果系统点击方法综合示例
苹果系统点击方法综合示例
信息发布软件AIWROK苹果系统找图方法完整示例集合
AIWROK苹果系统找图方法完整示例集合
信息发布软件苹果系统找图方法完整示例集合
苹果系统找图方法完整示例集合
信息发布软件苹果IOS系统找字OCR方法例子
苹果IOS系统找字OCR方法例子
信息发布软件AIWORK软件数组高级示例
AIWORK软件数组高级示例
信息发布软件AIWROK软件运算符封装库示例
AIWROK软件运算符封装库示例
信息发布软件AIWROK软件语法运行小示例
AIWROK软件语法运行小示例
信息发布软件AIWROK软件JS循环小示例
AIWROK软件JS循环小示例
信息发布软件AIWROK软件H5网页被主脚本获取值用法
AIWROK软件H5网页被主脚本获取值用法
信息发布软件AIWROK软件创建可暂停恢复的多线程任务
AIWROK软件创建可暂停恢复的多线程任务
信息发布软件AIWROK软件类型转换方法例子
AIWROK软件类型转换方法例子
信息发布软件AIWROK软件H5脚本执行与进度显示
AIWROK软件H5脚本执行与进度显示 .
信息发布软件AIWROK软件根据时间段执行异步任务支持多线程并行处理
AIWROK软件根据时间段执行异步任务支持多线程并行处理
信息发布软件H5自动开关执行脚本功能演示
H5自动开关执行脚本功能演示
信息发布软件AIWROK软件H5单选脚本运行示例
AIWROK软件H5单选脚本运行示例
信息发布软件H5任务脚本选择与执行中心
H5任务脚本选择与执行中心
信息发布软件H5里CheckBox控件演示
H5里CheckBox控件演示
信息发布软件AIWROK软件正则用法实际例子
AIWROK软件正则用法实际例子
信息发布软件AIWROK软件权限管理器实现
AIWROK软件权限管理器实现
信息发布软件AIWORK软件节点方法无碍示例子
AIWORK软件节点方法无碍示例子
信息发布软件JSON.stringify 和 JSON.parse 完整示例
JSON.stringify 和 JSON.parse 完整示例
信息发布软件AIWROK软件展示JavaScript各种语句标识符的用法
AIWROK软件展示JavaScript各种语句标识符的用法
信息发布软件JS巧妙地组合使用各种条件语句
JS巧妙地组合使用各种条件语句
信息发布软件AIWROK手机数据库MySQL数据库截图片批量上传操作脚本
AIWROK手机数据库MySQL数据库截图片批量上传操作脚本
信息发布软件HID中文输入智能打字功能
HID中文输入智能打字功能
信息发布软件AIWROK软件对象工具函数库例子
AIWROK软件对象工具函数库例子
信息发布软件AIWROK软件H5交互演示黄色主题
AIWROK软件H5交互演示黄色主题
信息发布软件H5单按钮执行脚本示例
H5单按钮执行脚本示例
信息发布软件苹果H5界面完整调用脚本示例
苹果H5界面完整调用脚本示例
信息发布软件AIWROK软件平台设备信息全面检测工具例子
AIWROK软件平台设备信息全面检测工具例子
信息发布软件AIWROK创建和放大日志窗口并展示动态内容
AIWROK创建和放大日志窗口并展示动态内容
信息发布软件AIWROK软件device相关方法获取设备信息例子
AIWROK软件device相关方法获取设备信息例子[/backcolor]
信息发布软件数据库MySQL实时内容随机调用
数据库MySQL实时内容随机调用
信息发布软件AIWROK软件分享一个特效苹果H5页面
AIWROK软件分享一个特效苹果H5页面
信息发布软件数据库MYQ业务流程心跳程序启动
数据库MYQ业务流程心跳程序启动
信息发布软件数据库MySQL功能支持创建表插入中文数据查询删除功能例子
数据库MySQL功能支持创建表插入中文数据查询删除功能例子
信息发布软件AIWROK软件Zip 高级操作复杂示例
AIWROK软件Zip 高级操作复杂示例
信息发布软件AIWROK软件txt_文件读写方法小结
AIWROK软件txt_文件读写方法小结
信息发布软件AIWROK软件file文件操作方法小结
AIWROK软件file文件操作方法小结
信息发布软件AIWORK软件配置读写H5演示配套脚本
AIWORK软件配置读写H5演示配套脚本
信息发布软件AIWROK配置读写功能演示示例
AIWROK配置读写功能演示示例
信息发布软件AIWROK截图缓存工具
AIWROK截图缓存工具
信息发布软件AIWROK线程许可证工具
AIWROK线程许可证工具
信息发布软件整理了AIWROK环境下常用的Date对象和sleep对象方法
整理了AIWROK环境下常用的Date对象和sleep对象方法
信息发布软件FastUI界面普通用法
FastUI界面普通用法
信息发布软件FastUI界面类[window]方法小结
FastUI界面类[window]方法小结 方法 1:close(关闭指定窗口)方法 2:closeAll(关闭所有窗口)方法 3:loadUI(加载 UI 界面)方法 4:onClose(监听窗口关闭事件)方法 5:onLoad(监听窗口加载事件)方法 6:setFull(设置窗口全屏)方法 7:setHeight(设置窗口高度)方法 8:setHidden(隐藏窗口)方法 9:setLeft(设置窗口 X 轴坐标)方法 10:setTop(设置窗口 Y 轴坐标)方法 11:setVisable(显示隐藏的窗口)方
信息发布软件AIWROK软件按钮监听UI界面与事件监听功能演示
AIWROK软件按钮监听UI界面与事件监听功能演示.
信息发布软件AWIROK软件多选[uiCheckBox]方法小结
AWIROK软件多选方法小结 方法一:findByID 加载多选控件方法二:getAllChecked 获取所有选中项方法三:getAllSelect 获取所有选项方法四:getChecked 获取某个选项是否选中方法五:setChecked 设置某个选项是否选中方法六:setCheckeds 设置多个选项是否选中方法七:setHeight 设置高度
信息发布软件AIWROK日志演示开启日志显示 → 放大 → 关闭代码
AIWROK日志演示开启日志显示 → 放大 → 关闭代码
信息发布软件&#127983;AIWROK数组方法高级应用案例
🏯AIWROK数组方法高级应用案例
信息发布软件AIWROK软件日志悬浮窗简化版自动切换位置
AIWROK软件日志悬浮窗简化版自动切换位置
信息发布软件AIWROK软件String实例演示
AIWROK软件String实例演示
信息发布软件AIWROK软件S内置String类[String]方法小结
AIWROK软件S内置String类[String]方法小结 方法 1:charAt[/backcolor]方法 2:charCodeAt[/backcolor]方法 3:indexOf[/backcolor]方法 4:lastIndexOf[/backcolor]方法 5:length[/backcolor]方法 6:match[/backcolor]方法 7:replace[/backcolor]方法 8:replaceAll[/backcolor]方法 9:split[/backcolor]方法 10:startsWith[/backcolor]方法 11:substr[/backcolor]方法 12:substring[/backcolor]方法 13:trim[/backcol
信息发布软件AIWROK软件完整的WebSocket客户端示例
这段代码是一个完整的WebSocket客户端示例,用于连接到指定的WebSocket服务器并处理各种事件。具体来说,代码的作用如下: 定义服务器地址:首先定义了一个服务器的IP地址和端口号 var ip = "154.37.221.104:8886";。 创建WebSocket对象:尝试创建一个新的WebSocket对象 var ws = new WebSocket();。注意,这里的 new ws() 应该是 new WebSocket()。 添加事件监听器:代码中尝试为WebSocket对象添加事件监听器,但这里有一个错误。
信息发布软件AIWROK软件苹果系统中实现四种基本滑动操作
AIWROK软件苹果系统中实现四种基本滑动操作
信息发布软件hid的滑动没有百分比坐标滑动吗
hid的滑动没有百分比坐标滑动吗
信息发布软件单选控件[uiRadioButton]方法小结
单选控件方法小结 方法 1:加载单选控件[/backcolor]方法 2:获取选中项[/backcolor]方法 3:设置高度[/backcolor]方法 4:设置选中项[/backcolor]

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-2-19 04:20 , Processed in 0.207090 second(s), 56 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

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