码迷,mamicode.com
首页 > 其他好文 > 详细

大数乘法——2016开发实习生腾讯模拟笔试编程题

时间:2016-04-05 19:28:47      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:

给出两个大数,用字符串模拟整型数字的乘法。

#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;
}

 

大数乘法——2016开发实习生腾讯模拟笔试编程题

标签:

原文地址:http://www.cnblogs.com/LUO77/p/5356308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!