#include <iostream>
#include <string.h>
using namespace std;
#define ll long long
#define maxsize 2560 //大小可以更改
typedef struct bigpow{
int value[maxsize];
int size;
}POW;
POW init(POW num){
for (int i = 1; i <= maxsize; i++) num.value[i] = 0;
return num;
}//初始化
POW chtoin(char s[]){
POW num;
num=init(num);
num.size = 0;
int len = strlen(s+1);
for(int i = 1; i <= len; i++){
num.value[i] = s[len - i + 1]-'0';
num.size++;
}
return num;
}
POW big_multi(POW num1,POW num2){
POW num;
num = init(num);
num.size = num1.size + num2.size - 1;
for(int i = 1; i <= num1.size; i++)
for(int j = 1; j <= num2.size; j++)
{
num.value[i + j - 1] += num1.value[i] * num2.value[j];
num.value[i + j] += num.value[i + j - 1] / 10;
num.value[i + j - 1] %= 10;
}
while(num.value[num.size + 1] > 0) num.size++;
return num;
}
void write(POW ans){
for(int i = ans.size; i >= 1; i--)
cout << ans.value[i];
}
int main()
{
char s1[6666],s2[6666];
cin >> (s1 + 1) >> (s2 + 1);//从1开始,掠过0位置
if(strcmp(s1 + 1, "0") == 0 || strcmp(s2 + 1, "0") == 0) cout << "0";//如果至少有一个是0,直接输出结果,很方便
else write(big_multi(chtoin(s1), chtoin(s2)));
return 0;
}
高精度乘法 结构体实现
于 2021-02-06 10:23:07 首次发布