1015. 高精度乘法
Description
输入2个整数a和b,输出a*b。
Input Format
输入有两行,第一行a,第二行b。
0≤a,b≤2^1000。
Output Format
输出只有一行,a*b。
Sample Input
44
3
Sample Output
132
分析
使用数组代替大数进行运算。
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
void mux(vector<char> &a, int x, int address, vector<char> &c)
{
vector<char>::reverse_iterator it_ra;
vector<char>::iterator it_c;
char tmp_ia=0, tmp_ic=0;
char a_1=0, a_10=0, a_all=0;
for(it_ra=a.rbegin(), it_c=c.begin(), it_c+=address; it_ra!=a.rend(); it_ra++, it_c++) {
a_all = *it_ra * x + a_10;
a_10 = a_all/10;
a_1 = a_all % 10;
*it_c = *it_c + tmp_ic + a_1;
if(*it_c > 9) {
tmp_ic = *it_c / 10;
*it_c = *it_c % 10;
}
else
tmp_ic=0;
}
tmp_ic=tmp_ic+a_10;
for(; it_c!=c.end() && tmp_ic!=0; it_c++) {
*it_c = *it_c + tmp_ic;
if(*it_c > 9) {
*it_c = *it_c -10;
tmp_ic=1;
}
else
tmp_ic=0;
}
}
int main()
{
char tmp_c;
vector<char> a, b, c;
vector<char>::reverse_iterator it_r, it_rc;
int i;
while((tmp_c=getchar())!='\n')
a.push_back(tmp_c-'0'), c.push_back(0);
while((tmp_c=getchar())!='\n')
b.push_back(tmp_c-'0'), c.push_back(0);
if(a.size()>b.size())
for(it_r=b.rbegin(), i=0; it_r!=b.rend(); it_r++, i++)
mux(a, *it_r, i, c);
else
for(it_r=a.rbegin(), i=0; it_r!=a.rend(); it_r++, i++)
mux(b, *it_r, i, c);
it_rc=c.rbegin();
if(*it_rc!=0)
cout<<int(*it_rc);
it_rc++;
for(; it_rc!=c.rend(); it_rc++)
cout<<int(*it_rc);
cout<<endl;
return 0;
}
网友评论