大数乘法——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;
}

 

posted @ 2016-04-05 18:45  0giant  阅读(362)  评论(0编辑  收藏  举报