加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

CPP 大数相乘法

发布时间:2020-12-14 02:34:42 所属栏目:大数据 来源:网络整理
导读:#include iostream #include string using namespace std; void largeMul(const char *a,const char *b); int main() { string num1,num2; ? ? // 初始状态用string来存储大数 cout "请输入两个大数: " endl; cin num1 num2; const char *p1 = num1.c_str()
#include <iostream>
#include <string>


using namespace std;


void largeMul(const char *a,const char *b);


int main()
{
string num1,num2; ? ? // 初始状态用string来存储大数

cout << "请输入两个大数: " << endl;
cin >> num1 >> num2;

const char *p1 = num1.c_str(); ? ?// 将string转为 const char *
const char *p2 = num2.c_str(); ? ?// 将string转为 const char *
largeMul(p1,p2);

system("pause");
return 0;
}


void largeMul(const char *numX,const char *numY)
{
int i,j,lengthX,lengthY,*s;

lengthX = strlen(numX);
lengthY = strlen(numY);

s = (int *)malloc(sizeof(int)*(lengthX + lengthY)); ? //分配存储空间
for (i = 0; i < lengthX + lengthY; i++)
{
s[i] = 0; ? ? ?// 每个元素赋初值0
}

for (i = 0; i < lengthX; i++)
{
for (j = 0; j < lengthY; j++)
{
s[i + j + 1] += (numX[i] - '0')*(numY[j] - '0');
}
}

for (i = lengthX + lengthY - 1; i >= 0; i--) ? ? ? ?// 这里实现进位操作
{
if (s[i] >= 10)
{
s[i - 1] += s[i] / 10;
s[i] %= 10;
}
}

char *c = (char *)malloc((lengthX + lengthY)*sizeof(char)); ?//分配字符数组空间,因为它比int数组省!

i = 0;

while (s[i] == 0)
{
i++; ? // 跳过头部0元素
}

for (j = 0; i < lengthX + lengthY; i++,j++)
{
c[j] = s[i] + '0';
}

c[j] = '';

for (i = 0; i < lengthX + lengthY; i++)
{
cout << c[i];
} cout << endl; free(s);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读