蓝桥杯 —— 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;
}
#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;
}
相关文章推荐
- 算法提高 P1001 (大数相乘)
- 蓝桥杯 P1001(大数乘法)
- 历届试题 矩阵翻硬币 蓝桥杯 大数开方 大数相乘
- 2013第四届蓝桥杯 C/C++本科A组 排它平方数(2个数相乘为大数,大数位标记的方法)
- 第三届蓝桥杯大数相乘6填空题
- 蓝桥杯练习题P1001(大数乘法)
- 矩阵翻硬币 蓝桥杯 大数开方 大数相乘
- Karatsuba乘法--实现大数相乘
- 大数相乘+大数相加
- 大数相乘+大数相加
- ObjC 实现的大数相加,大数相乘和n的阶乘
- 大数相乘
- 算法-蓝桥杯-算法提高 P1001(JAVA)
- 【字符串】【AOJ-152】A × B problem(大数相乘、高精度乘法)
- 大数相加 大数相乘 C++
- 算法提高 P1001 (大数乘法)
- 大数相乘
- 大数相乘java代码-千里之外张天机
- 分治算法思想(4)未——两个大数相乘,欧冠冠军杯比赛日程安排
- 大数相乘