- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM国际大学生程序设计竞赛主讲王树林当有一个很大的整数要运算时, 如何算?例如: 一个一佰位数的数字.int 最大只能到232约十个位数的十进制数.先看大数加法.就是改成手动去算加法, 而不是由计算机算.123456789123+ 234123467890
方法一: 使用数组(array)例如: int a[100], b[100], sum[100];然后sum[i]=a[i]+b[i]+c记住, c 是进位(carry), 这边我们要自行处
理.输入成字符串再把字符串分解成数组中各个元素.需要一个parse字符串的子程序.void parse(char *s, int *a){int i,j;
j=strlen(s);
for(i=0;ij;i++){
a[j-1-i]=s[0]-30;}}
void add(int *a, int *b, int *sum){
int i,c;
c=0;for(i=0;i100;i++){sum[i]=a[i]+b[i]+c;
if(sum[i]=10){
sum[i]=sum[i]-10;
c=1;
} else {
c=0;
}
}
}array 改成byte的元素. (省空间)更省? 一个元素就可以到255, 256才进位.用bool用link list 方式(可以让输入的数字更大)
其他?同样的原理.现将一些关键算法的实现方法描述如下大数的一些简单计算的算法
1、大数加法运算的实现算法(1)将A、B按位对齐(2)低位开始逐位相加(3)对结果做进位调整2、大数减法运算实现算法(1)将A、B按位对齐(2)低位开始逐位相减(3)对结果做借位调整3、大数乘法运算实现算法(1)引入sum2 、sum1中间过渡量
(2)在n的每一位上处理m
(3)通过每一层循环实现乘法的加法化(4)对结果做进位调整4、大数除法运算的算法实现
(1)引入al来标识a的长度, bl来标识b的长度
(2)测算a和b的长度
(3)高位开始对位做减法并完成借位(4)高位开始逐位计算商(5)整理商, 产生余数;
5、大数取模运算的算法实现
在取模运算中用到了上面的除法运算只需返回余数即可。ACDB
X=
Y=).
()()(
2)))(((2
).()(
2)(2)2)(2(
,2,259
.13log
2/
2
2/2/2/
2/2/n
OnOnT
BDBDACCDBAACXY
nOnT
BDCBADACDCBAXY
DCYBAXn
n
nnnn
nn
题意本题目给三个数字t,a,b(都比2147483647小)问(t^a - 1)/(t^b -1)
是大小于100位数或是否为整数若小于100位数就印该值。
题意范例
Sample Input
2 9 3
2 3 2
21 42 7
123 911 1Sample Output(2^9-1)/(2^3-1) 73
(2^3-1)/(2^2-1) is not an integer with less than 100 digits.(21^42-1)/(21^7-1) 18952884496956715554550978627384117011154680106(123^911-1)/(123^1-1) is not an integer with less than 100 digits.解法1t=1It’s easy to see that it’s answer isn’t a integer
with less than 100 digits.
2a=bIt’s easy to see that it’s answer is 1.3if(a %b != 0) It’s answer isn’t a integer with less than 100 digits.
证明
令(t^a - 1)/(t^b -1) = n, n是整数证明a%b=0(t^a - 1)/ (t^b - 1) = t^(a-b) +t^(a-2b)+t^(a-3b)+……+t^(a-nb)
因为一定除的进(这是我们的假设)所以a-nb = 0,∴
a%b = 0∵p-q, -q--p, ∴a%b!=0,就不会是整数。令x=t^b, a/b=y, y是正整数(t^a - 1)/(t^b -1) = (x^y-1)/(x-1)
(x^y-1)/(x-1) = x^(y-1)+x^(y-2)+x^(y-3)+….+x^0
∵x^
文档评论(0)