ACM培训材料PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进位e=0 (e=(a[1]+b[1]+e)/10) c[2]=(a[2]+b[2])%10+e=0, 百位进位e=1,依次下去,
最后把数组输出就是结果(要倒过来输出)
2020/10/13
4
对上面例子的实现
#include<stdio.h>
#include<string.h>
#define N
}
2020/10/13
7
注意上面程序的M的好处
上面M定义为10000,这样不仅提高了效率而 且也节省了空间
如果要你把N阶乘转成2或3进制你会吗? 如:把18!转换成2进制. 如果你不会,那么你还没对那个程序M深刻
理解.
2020/10/13
8
N!末尾有多少个0
很简单,只要N!有多少个5这个因子,就有多少 个0.
2020/10/13
3
用数组实现高精度加法
如果我们要对两个数:876521445544和 5555465445454进行相加
先定义两个数组,a,b表示这两个数,然后用数组c来 存结果
a[0]=4,a[1]=4,a[2]=5,…….
b[0]=5,b[1]=5,b[2]=5,……. c[0]=(a[0]+b[0])%10=9 个位e=0 c[1]=(a[1]+b[1])%10+e=9 +e为前一位的进位, 十位
#include<stdio.h>
#define M 10000
int d[1024],t,N;
int main()
{
int i,j,p,q;
while(scanf("%d",&N)!=EOF){
d[1]=1;
t=1;
for(i=1;i<=N;i++){
p=0;
for(j=1;j<=t;j++){
{
p=a[i]+b[i]+e;
c[i]=p%10;
e=p/10;
}
lc=lb;
while(e>0)
{
lc++;
c[lc]=e%10;
e/=10;
}
for(i=lc;i>=0;i--)
{
printf("%d",c[i]);
}
printf("\n");
return 0;
}
2020/10/13
5
用高精度算N阶乘
ACM培训材料
高精度加法 用高精度算N阶乘 N!0
2008-7-13
2020/10/13
1
高精度加法
我们知道计算机表示范围很有限,在VC中 int -231~231-1 最多可表示10位 double 虽然可以表示范围可到38位,但是有 效位也只有15~16位
如果我们要对几百位的整数要加,怎么 办.这就是我这节要讲的内容.我们可以 用数组来模拟高精度.
详细见课堂分析.
2020/10/13
9
fjnu:1743 fjnu:1185 fjnu:1307 fjnu:1191 fjnu:1158
作业
2020/10/13
10
谢谢您的指导
THANK YOU FOR YOUR GUIDANCE.
感谢阅读!为了方便学习和使用,本文档的内容可以在下载后随意修改,调整和打印。欢迎下载!
汇报人:XXXX 日期:20XX年XX月XX日
11
int main()
{
int i,lc;
int a[128]={4,4,5,5,4,4,1,2,5,6,7,8,0},la=11;
int b[128]={4,5,4,5,4,4,5,6,4,5,5,5,5,0},lb=12;
int c[128]={0};
int e=0,p;
for(i=0;i<=lb;i++)
q=d[j]*i+p;
d[j]=q%M;
p=q/M;
}
while(p>0){
2020/10/13
6
t++;
d[t]=p%M;
wk.baidu.com
p/=M;
}
}
printf("%d",d[t]);
for(i=t-1;i>=1;i--)
printf("%04d",d[i]);
printf("\n");
}
return 1;
2020/10/13
2
如何用数组来表示高精度
有如下一个大数如: 12354564646456
我们这样用数组表示: 数组下标小的存数位权重低的(即反过来存) 假如我们数组的每一个变量只存一位(即可 认为是一个十进制模拟) 我们用数组int d[20]在存:
d[0]=6,d[1]=5,d[2]=4,d[3]=6,d[4]=4,……..
相关文档
最新文档