892练习(三):迭代法求平方根、100个阶乘有几个0

一、迭代法

1、迭代法求平方根

问题描述

即求一个数a 开根号的后是多少?求一个近似值。
迭代就是重复反馈的过程,目的是为了逼近所需的目标或结果。每次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。

算法

先给定一个假设的平方根值,如x0=a/2;用迭代公式 x1=(x0+a/x0)/2 一直算到 |x0-x1|<deta,即可输出。计算公式如下:
在这里插入图片描述

代码

#include<stdio.h>
#include<math.h>
int main()
{
	double a,x0,x1;
	scanf("%lf %lf",&a,&x0);//x0=a/2
	x1=(x0+a/x0)/2;//迭代法公式
	do{
		x0=x1;//上一次迭代的结果是下一次迭代的初值
		x1=(x0+a/x0)/2;
	}while(fabs(x1-x0)>=1e-5);//fab绝对值函数
	printf("%.6f\n",x1);
	return 0;
}

2、迭代法求方程的根

问题描述

求方程x3-x-1=0再区间[0,2]中的根

算法思想

采用二分法的思想。对给定范围 [x1,x2] 进行二分,寻找根所在的区间,即两个端点处函数值异号的区间。得到一个新的区间继续进行迭代,直到区间长度小于一定值。

代码

double solution(){
    int x1,x2,x3;
    x1=0;
    x2=2;
    do{
        x3=(x1+x2)/2;
        if((x1*x1*x1-x1-1)*(x3*x3*x3-x3-1)>0){
            x3=x1;
        }else{
            x3=x2;
        }
    }while(fabs(x2-x1)>=1e-6);
    cout<<x1;
}

二、100!有几个零

1、分析

一般这类题目都会蕴含某种规律或简便方法,阶乘末尾的一个零表示一个进位,则相当于乘10。而10是由2*5所得,在1-100中,可以产生10的有:0 2 4 5 6 8 结尾的数字,显然2是足够的,因为4 6 8 当中都含有2的因子,所以都可以当成2看。那么关键在于5的数量。故该问题的实质是要求除1-100含有多少个5?

2、计算过程

由特殊推广到一般的论证过程可得:
1、每隔5个会产生一个0,比如5,10,15,20,,,
2、每隔55个会多产生出一个0,比如25,50,75,100,,,
3、每隔5
5*5会再多产生出一个0 比如125

3、结果

1、所以100!末尾由多少个零?
100/5+100/25=24
2、1000!末尾有多少个零?
1000/5+1000/25+1000/125=249

4、举一反三

2009!末尾有多少个零?

2009/5=401
1-2009之间有401个数是5的倍数(余数省略)
401/5=80
1-2009之间有80个数是25的倍数
80/5=16
1-2009之间有16个数是125的倍数
16/5=3
1-2009之间有3个数是625的倍数
1-2009之间有0个数是3125的倍数
故:2009!末尾有401+80+16+3=500个0;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值