华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2175|回复: 1
打印 上一主题 下一主题

20150206讲义 高精度

[复制链接]

61

主题

147

帖子

563

积分

超级版主

Rank: 8Rank: 8

积分
563
跳转到指定楼层
楼主
发表于 2015-2-6 16:25:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、读得字符串
2、对齐。把短串的前面添上0
3、从最右边开始,逐步往前加 注意进位     
    ic=a[i]-'0'+b[i]-'0'+k  K 是进位  
   if (ic>=10) {ic=ic-10;k=1;}
   else {k=0}
   c[i]=ic+'0'  
4、最后一位 若有进位 直接在前面添1





乘法   100!  3^N
大数字乘以小数字

用a【0】表示个位
一起乘 一起进位
进位标准程序
   for(i=0;i<=l-1!!!!;i++)
     {  x=a[i];
        a[i]=x%10;
        a[i+1]=a[i+1]+x/10;
     }
   while a[l]>9{!!!!!}

高精度  大数字乘以大数字
好简单   
  for (i=0;i<=la;i++)
    for (j=0;j<=lb;j++)
     c[i+j]=c[i+j]+a[i]*b[j]
  然后一起处理进位

除法 两种 单精度  高精度
ys=0;
for (i=0;i<=la;i++)
    {
     x=ys*10+a[i]
     s[i]=x/CS  CS 是除数
     ys=x%cs
   }
  最后一位处理四舍五入  *****
高精度就很麻烦了
  可以用字符串表示  
先存下来 cs的0 1 2 3 4 5 6 7 8 9倍
从第一位开始 逐个去比较,假设小于N+1倍

而大于N倍 则减去N倍,余数乘以10加上当前

位继续。


考试题集锦
1、1!+2!+3!+****100!
2、N进制多位数加法  给定100个以内100位

以内的2-16进制的数字,求和。
3、1^n+2^n+***m^n的最后K位  其中MNK

都小于999
4、麦森数2^N-1的位数和最后500位
5、n!末尾有多少个连续的0 ,最后一个非零的

数字是几。
变形和技巧
1、数字很大我们需要记录数字的有效位数
2、考虑多位进制  每个数字表示10000或

者10^8(看情况 加减问题不大 乘除要注意范

围)
3、利用以前的结果



回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-7 01:33 , Processed in 0.152300 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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