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校招真题在线编程-拼多多-大整数的主要内容,如果未能解决你的问题,请参考以下文章