2018校招真题在线编程-拼多多-大整数

Posted 氵冫丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018校招真题在线编程-拼多多-大整数相关的知识,希望对你有一定的参考价值。


模拟加法运算

先乘法,后加法,最后进位;

需要考虑一个问题:A * B = C 之后 C 的长度是多少?

如果 B = 1 C 的长度 等于 A 的长度;
A 每乘以 B 的一位数,都会右移动一位, 这里第一次不会移动,所有移动的长度是 lenB,最长数的长度是:lenA + len B ( 不考虑进位的问题)

第三步进位,会不会出现进位的情况?
最多一个进位;

所以最后 乘积 C 的长度是 lenA + lenB + 1

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
 
using namespace std;
#define MAX 1010 
int main(int argc,char *argv[])

    string a;
    string b;
    cin >> a >> b;
    int lenA = a.length();
    int lenB = b.length();
    int A[MAX],B[MAX],C[MAX]=0;
    for (int i = lenA -1 ; i>=0; --i) 
        A[lenA - i - 1]  = a[i] - '0';
    
    for (int j = lenB - 1; j >= 0; --j) 
        B[lenB - j - 1] = b[j] - '0';
    
    for (int i = 0 ; i < lenA ; ++i) 
        for (int j = 0; j < lenB; ++j) 
            C[i+j] += A[i] * B[j];
        
    
    int t = 0;
    for ( int i = 0; i < lenA + lenB ; ++i) 
        if (C[i] > 9) 
            C[i+1] += C[i]/10;
            C[i] = C[i]%10;
        
    
    int i = lenA + lenB ;
    while(i>=0 && C[i]==0) 
        i--;
    
    while(i>=0) 
        cout<<C[i];
        --i;
    
    return 0;


参考:https://blog.csdn.net/weixin_41376979/article/details/79197186

以上是关于2018校招真题在线编程-拼多多-大整数的主要内容,如果未能解决你的问题,请参考以下文章

2018 拼多多 校招真题 最大乘积

2018校招真题在线编程-拼多多-最大乘机

2018 校招在线编程 20题-01

2020年拼多多校招面试题及答案-最全最新-持续更新中

[Nowcoder] 大整数相乘(拼多多笔试题)

牛客网2016校招真题在线编程之懂二进制