洛谷 P1303 A*B Problem 高精度乘法
Posted lpl_bys
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1303 A*B Problem 高精度乘法相关的知识,希望对你有一定的参考价值。
- 时空限制1s / 128MB
题目描述
求两数的积。
输入输出格式
输入格式:
两行,两个数。
输出格式:
积
输入输出样例
说明
每个数字不超过10^2000,需用高精
------------------------------------------------------------------------------------------------
既然有了高精度加减法,那就有高精度乘法
跟我们平时计算的习惯不同,实际操作的时候不用管两个大整数位数的多少,直接选一个大整数的每一位与另一个大整数的每一位分别相乘后进位,不用管谁上谁下
而且结果的位数一定不大于两大整数位数的和
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 23333 4 struct BigNum{ 5 int s[maxn],len; 6 BigNum(){len=1;memset(s,0,sizeof(s));} 7 }; 8 char ai[maxn],bi[maxn]; 9 BigNum a,b,c; 10 void ride(BigNum*,BigNum*,BigNum*); 11 int main(){ 12 scanf(" %s %s",ai,bi); 13 a.len=strlen(ai); 14 b.len=strlen(bi); 15 for(int i=a.len-1;i>=0;i--) a.s[a.len-i]=ai[i]-48; 16 for(int i=b.len-1;i>=0;i--) b.s[b.len-i]=bi[i]-48; 17 ride(&a,&b,&c); 18 for(int i=c.len;i>0;i--) printf("%d",c.s[i]); 19 return 0; 20 } 21 void ride(BigNum *x,BigNum *y,BigNum *z){ 22 z->len=x->len+y->len; 23 for(int i=1;i<=x->len;i++) 24 for(int j=1;j<=y->len;j++){ 25 z->s[i+j-1]+=x->s[i]*y->s[j]; 26 z->s[i+j]+=z->s[i+j-1]/10; 27 z->s[i+j-1]%=10; 28 } 29 while(z->len>1&&!z->s[z->len]) z->len--; 30 }
以上是关于洛谷 P1303 A*B Problem 高精度乘法的主要内容,如果未能解决你的问题,请参考以下文章