大整数乘法
来源:互联网 发布:ubuntu opera中文乱码 编辑:程序博客网 时间:2024/06/06 01:17
大整数乘法,把十位进制改为1000位进制就可以了
#include <iostream>
#include <stdio.h>#include <string.h>
#include <algorithm>
#include <queue>
#define imax 1000005
using namespace std;
int an,bn,A[imax],B[imax];
int result[imax];
char a[imax],b[imax];
void multiLargeNum(int* A, int* B) {
memset(result, 0, sizeof(result));
result[an+bn] = 0;
int multiFlag; // 乘积进位
int addFlag; // 加法进位
for(int i=0; i <= an; i++) { // B的每一位
multiFlag = 0;
for(int j=0; j <= bn; j++) { // A的每一位
int temp1 = A[i]*B[j]+ multiFlag+result[i+j];
multiFlag = temp1 / 1000;
result[i+j] = temp1 % 1000 ;
}
result[i + bn+1] += multiFlag ;
//for(int k=an+bn+2;k>=0;k--)
// printf("%d ", result[k]);
// cout<<endl;
}
}
int main() {
while(scanf("%s %s",a+1,b+1)!=EOF) {
int num;
int len1=strlen(a+1);
int len2=strlen(b+1);
int i=len1;
num=0;
while(i>0) {
if(i-3>=0) {
A[num++]=(a[i-2]-'0')*100+(a[i-1]-'0')*10+(a[i]-'0');
i=i-3;
}
else {
if(i==1)
A[num]=a[i]-'0';
if(i==2)
A[num]=(a[1]-'0')*10+a[2]-'0';
i=0;
num++;
}
}
an=num-1;
num=0;
i=len2;
while(i>0) {
if(i-3>=0) {
B[num++]=(b[i-2]-'0')*100+(b[i-1]-'0')*10+(b[i]-'0');
i=i-3;
}
else {
if(i==1)
B[num]=b[i]-'0';
if(i==2)
B[num]=(b[1]-'0')*10+b[2]-'0';
i=0;
num++;
}
}
bn=num-1;
multiLargeNum(A, B);
int st=an+bn;
if(result[an+bn+1]!=0)
printf("%d",result[an+bn+1]);
else
{
printf("%d",result[an+bn]);
st=an+bn-1;
}
for(i=st; i>=0; i--)
{
printf("%d",result[i]/100);
result[i]=result[i]%100;
printf("%d", result[i]/10);
result[i]=result[i]%10;
printf("%d", result[i]);
}
cout<<endl;
}
// delete [] res;
return 0;
}
阅读全文
0 0
- 大整数乘法
- C++大整数乘法
- 大整数FFT乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法。。。。。
- 大整数乘法
- 大整数乘法
- // //大整数乘法
- 大整数乘法
- 大整数乘法算法
- 【算法】 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法。
- 大整数乘法
- 搜狐_装箱子
- SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤
- 动态规划思想:石子合并问题
- Go基础编程:第一个Go程序
- 正则表达式判断手机号的合法性
- 大整数乘法
- SVG动画
- C#中的SQLite,出现“v2.0.50727”...无法在 4.0 运行时中加载该程序集
- Android 编译命令
- Python变量传递以及内存地址的改变问题
- Linux之父的别样人生
- 计蒜客
- 交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
- cookies(增删取)