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

2018校招真题在线编程-拼多多-大整数_第1张图片
模拟加法运算
在这里插入图片描述
先乘法,后加法,最后进位;

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

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

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

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

#include 
#include 
#include 
#include 
 
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校招真题在线编程)