1. 程式人生 > >大數相乘 51nod 1027 水題

大數相乘 51nod 1027 水題

color pla 兩個 cheng int img 一起 ems 位數

給出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 }
View Code

大數相乘 51nod 1027 水題