编程练习11
大数相乘
1 //大数相乘 2 #include <iostream> 3 using namespace std; 4 5 void invert(char str1[],char str2[]) 6 { //------------------------------------------- 7 //这前面都是初始化操作,没什么东西 8 int len1=strlen(str1),len2=strlen(str2); 9 int* num1=(int*)malloc(sizeof(int)*len1); 10 int* num2=(int*)malloc(sizeof(int)*len2); 11 int len=len1+len2; 12 int* sum=(int*)malloc(sizeof(int)*len); 13 14 for(int i=0;i<len1;++i) 15 num1[i]=str1[i]-'0'; 16 for(int j=0;j<len2;++j) 17 num2[j]=str2[j]-'0'; 18 for(i=0;i<len1+len2;++i) 19 sum[i]=0; 20 //-------------------------------------------- 21 //按位相乘 22 for(i=0;i<len1;++i) 23 for(j=0;j<len2;++j) 24 sum[i+j+1]+=num1[i]*num2[j]; 25 //移位操作 26 for(i=len-1;i>0;--i) 27 { 28 if(sum[i]>=10) 29 { 30 sum[i-1]+=sum[i]/10; 31 sum[i]%=10; 32 } 33 } 34 35 if(sum[0]!=0) cout<<sum[0]; 36 for(i=1;i<len;++i) 37 cout<<sum[i]; 38 39 } 40 41 int main() 42 { 43 char str1[100]={0},str2[100]={0}; 44 cin>>str1>>str2; 45 invert(str1,str2); 46 47 cout<<endl; 48 return 0; 49 }
华为啊,悲剧,考之前听大成讲时原以为很高深,懂的原理后,so easy!
所以机会总是留给有准备的人,华为进不去了哦,卧槽,我怎么总是这是二啊,信息有时很重要啊!
思想的高度决定事情的成败!
浙公网安备 33010602011771号