我的算法
class Solution {
public:
string multiply(string num1, string num2) {
int sa = num1.size(), sb = num2.size();
if(0 == sa || 0 == sb) return "";
vector<int> res(sa + sb);
int pos = 1;
for(int i = 0; i < sa; ++i)
{
pos = i + 1;
for(int j = 0; j < sb; ++j)
res[pos++] += (num1[i] - '0')*(num2[j] - '0');
}
for(int i = sa + sb - 1; i > 0; --i)
{
res[i-1] += res[i]/10;
res[i] %= 10;
}
pos = -1;
while(++pos < res.size() && 0 == res[pos]);
if(pos >= res.size()) return "0";
stringstream oss;
while(pos < res.size())
oss << (char)(res[pos++] + '0');
return oss.str();
}
};
参考
#include <iostream>
#include <cstring>
#include <malloc.h>
using namespace std;
const int MAX = 1000;//控制输入数据的位数
void multiply(char* a,char* b,char* c)
{
int i,j,ca,cb,* s;
ca=strlen(a);
cb=strlen(b);
s=(int*)malloc(sizeof(int)*(ca+cb));
for (i=0;i<ca+cb;i++)
s[i]=0;
for (i=0;i<ca;i++)
for (j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for (i=ca+cb-1;i>=0;i--)
if (s[i]>=10)
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
i=0;
while (s[i]==0)
i++;
for (j=0;i<ca+cb;i++,j++)
c[j]=s[i]+'0';
c[j]='\0';
free(s);
}
int main()
{
char number1[MAX],number2[MAX],*multi;
cout<<"please input number1: "<<endl;
cin>>number1;
cout<<"please input number2: "<<endl;
cin>>number2;
multi=(char*)malloc(strlen(number1)+strlen(number2));
multiply(number1,number2,multi);
cout<<number1<<" * "<<number2<<" = "<<multi<<endl;
return 0;
}
大整数 乘法
最新推荐文章于 2023-10-29 14:59:02 发布