大数相乘 51nod 1027 水题
Posted 小小超plus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数相乘 51nod 1027 水题相关的知识,希望对你有一定的参考价值。
给出2个大整数A,B,计算A*B的结果。
Input
第1行:大数A 第2行:大数B (A,B的长度 <= 1000,A,B >= 0)
Output
输出A * B
Input示例
123456 234567
Output示例
28958703552
把两个数倒序放在数组里,
然后算第一个数乘以一到九的值
再通过位数去加在一起
具体看程序
1 #include <iostream> 2 using namespace std; 3 #include<string.h> 4 #include<set> 5 #include<stdio.h> 6 #include<math.h> 7 #include<queue> 8 #include<map> 9 #include<algorithm> 10 #include<cstdio> 11 #include<cmath> 12 #include<cstring> 13 #include <cstdio> 14 #include <cstdlib> 15 #include<stack> 16 #include<vector> 17 int a[1010]; 18 int b[1010]; 19 int c[10][10100]; 20 int d[1010000]; 21 char a1[1010]; 22 char b1[1010]; 23 int lena,lenb; 24 int cheng(int n) 25 { 26 int TM=0; 27 int i; 28 for(i=0;i<lena||TM!=0;i++) 29 { 30 c[n][i]=(a[i]*n+TM)%10; 31 TM=(a[i]*n+TM)/10; 32 //cout<<TM<<"_"<<endl; 33 } 34 //for(--i;i>=0;i--) 35 //cout<<c[n][i]; 36 //cout<<endl; 37 } 38 int jia(int n,int x) 39 { 40 int TM=0; 41 int i; 42 int j; 43 for(i=0,j=x;c[n][i]!=-1;i++,j++) 44 { 45 int temp=(TM+c[n][i]+d[j]); 46 d[j]=temp%10; 47 TM=temp/10; 48 } 49 if(TM!=0) 50 d[j++]=1; 51 return j; 52 } 53 int main() 54 { 55 memset(a,0,sizeof(a)); 56 memset(b,0,sizeof(b)); 57 memset(c,-1,sizeof(c)); 58 memset(d,0,sizeof(d)); 59 cin>>a1>>b1; 60 lena=strlen(a1); 61 lenb=strlen(b1); 62 int add=0; 63 for(int i=lena-1;i>=0;i--) 64 a[add++]=a1[i]-‘0‘; 65 add=0; 66 for(int i=lenb-1;i>=0;i--) 67 b[add++]=b1[i]-‘0‘; 68 for(int i=1;i<10;i++) 69 cheng(i); 70 for(int i=0;i<lenb-1;i++) 71 jia(b[i],i); 72 int temp=jia(b[lenb-1],lenb-1); 73 for(int i=temp-1;i>=0;i--) 74 cout<<d[i]; 75 cout<<endl; 76 return 0; 77 }
以上是关于大数相乘 51nod 1027 水题的主要内容,如果未能解决你的问题,请参考以下文章