字符串表示 大数相乘
发布时间:2020-12-14 02:58:28 所属栏目:大数据 来源:网络整理
导读:用字符串模拟 两个数字相乘 1 两个字符串分别逆序 2 字符串1[i]*字符串2[j] ?的结果 ? ? ?保存在i+j位置处,如果大于10则进位处理? span style="font-size:18px;"void multiply_1(char number1[],char number2[]){ int len1=0,len2=0;char *p1=number1,*p2=n
用字符串模拟 两个数字相乘 1 两个字符串分别逆序 2 字符串1[i]*字符串2[j] ?的结果 ? ? ?保存在i+j位置处,如果大于10则进位处理? <span style="font-size:18px;">void multiply_1(char number1[],char number2[]) { int len1=0,len2=0; char *p1=number1,*p2=number2; while (*p1++) { len1++; } while (*p2++) { len2++; } p1=NULL; p2=NULL; cout<<"原序列1:"; for (int i=0;i<len1;i++) { cout<<number1[i]; } for (int i=0;i<len1/2;i++) { number1[i]=number1[len1-1-i]+number1[i]; number1[len1-1-i]=number1[i]-number1[len1-1-i]; number1[i]=number1[i]-number1[len1-1-i]; } cout<<" 反转后序列1:"; for (int i=0;i<len1;i++) { cout<<number1[i]; } cout<<endl; cout<<"原序列2:"; for (int i=0;i<len2;i++) { cout<<number2[i]; } for (int i=0;i<len2/2;i++) { number2[i]=number2[len2-1-i]+number2[i]; number2[len2-1-i]=number2[i]-number2[len2-1-i]; number2[i]=number2[i]-number2[len2-1-i]; } cout<<" 反转后序列2:"; for (int i=0;i<len2;i++) { cout<<number2[i]; } cout<<endl; char *newArray=new char[len1+len2]; for (int i=0;i<len1+len2;i++) { newArray[i]='0'; } int max_Index=0; //结果的最大的索引位置 for (int i=0;i<len1;i++) { for (int j=0;j<len2;j++) { int result=(number1[i]-'0')*(number2[j]-'0'); //结果 int loc=i+j; //加到i+j位置上 do { max_Index=loc>max_Index?loc:max_Index; result=newArray[loc]-'0'+result; //结果值 newArray[loc]=result%10+'0'; //本位值 result=result/10; //进位到下一个 loc++; } while(result); } } for (int i=0;i<=max_Index/2;i++) { newArray[i]=newArray[max_Index-i]+newArray[i]; newArray[max_Index-i]=newArray[i]-newArray[max_Index-i]; newArray[i]=newArray[i]-newArray[max_Index-i]; } for (int i=0;i<=max_Index;i++) { cout<<newArray[i]; } cout<<endl; delete []newArray; } void main() { char number1[]="456333"; char number2[]="456333"; multiply_1(number1,number2); system("pause"); return; }</span> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |