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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数乘法——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;
}

 

以上是关于大数乘法——2016开发实习生腾讯模拟笔试编程题的主要内容,如果未能解决你的问题,请参考以下文章

腾讯暑期实习生线上(软件开发 移动开发)笔试涉及的知识点

腾讯2016实习生编程题 打印蛇形二维数组

2016携程测试实习生笔试编程题

腾讯2017暑假实习生 - 软件开发类笔试

腾讯实习笔试编程题 满二叉搜索树求三个节点的最低公共祖先

实习网申小技巧