大数乘法——2016开发实习生腾讯模拟笔试编程题
给出两个大数,用字符串模拟整型数字的乘法。
#include<iostream> #include<string> using namespace std; char* MultiString(char* str1,char* str2){ int len1=strlen(str1),len2=strlen(str2); if(len2>len1){ //len1,str1对应较长的字符串 char* temp=str1; int temp1=len1; str1=str2; str2=temp; len1=len2; len2=temp1; } char* ret=new char[len1+len2]; memset(ret,'0',sizeof(char)*(len1+len2-1)); //初始化字符串 ret[len1+len2-1]='\0'; if(len1==0||len2==0) return ret; int temp1=0,temp2=0; for(int i=len2-1;i>=0;i--){ int carry=0; for(int j=len1-1;j>=0;j--){ int sum=ret[i+j]-'0'; if(carry>0) sum+=carry; temp1=str1[j]-'0'; temp2=str2[i]-'0'; sum+=temp1*temp2; if(sum>=10){ carry=sum/10; } else carry=0; ret[i+j]=sum%10+'0'; //规格化处理 if(j==0&&carry>0) //最高位以后还有可能进位 ret[i-1]+=carry; } cout<<i<<" "<<ret<<endl; } char* p=ret; while(*p=='0') //如果前面有0,从第一位不是0开始输出 p++; cout<<p<<endl; return p; } int main(){ char* s1="23456"; char* s2="2345"; MultiString(s1,s2); return 0; }