您的位置:首页 > 其它

蓝桥杯 —— P1001 —— 大数相乘

2017-03-26 16:52 204 查看
83分..

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
#include <sstream>
#include <queue>
#include <stack>
#include <vector>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define For(a,b) for(int i = a;i<b;i++)
#define ll long long
#define MAX_N 100010
using namespace std;

char ans[35];
void reserve(char *p,int l,int r)
{
while(l < r)
{
char tmp = p[l];
p[l] = p[r];
p[r] = tmp;
l ++;
r --;
}
return ;
}
void muti(char *a,char *b)
{
int n = strlen(a);
int m = strlen(b);
//fill(ans,ans+n+m,'0');
memset(ans,'0',m+n);
ans[m+n] = '\0';
reserve(a,0,n-1);
reserve(b,0,m-1);
int mutimod = 0,addmod = 0;
for(int i = 0; i<n; i++)
{
mutimod = 0;
addmod = 0;
for(int j = 0; j<m; j++)
{
int tmp1 = (a[i]-48)*(b[j]-48)+mutimod;
mutimod = tmp1 / 10;
tmp1 %= 10;
int tmp2 = (ans[i+j]-48)+tmp1+addmod;
addmod = tmp2 / 10;
ans[i+j] = tmp2 % 10 + 48;
}
ans[i+m] += mutimod+addmod;
}
reserve(ans,0,m+n-1);
return ;
}
int main()
{
char a[20],b[20];
scanf("%s%s",a,b);
muti(a,b);
if(ans[0] != 48) printf("%c",ans[0]);
for(int i = 0; i<strlen(a)+strlen(b); i++)
{
printf("%c",ans[i]);
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: