目录思想代码思想 首先确定乘积的位数。 假设两个非负整数a和b,n1为a的长度(位数),n2为b的位数,记n为c=a*b的位数,则有: 计算两个乘数每位数字的乘积,其中a[i]乘b
首先确定乘积的位数。
假设两个非负整数a和b,n1为a的长度(位数),n2为b的位数,记n为c=a*b的位数,则有:
计算两个乘数每位数字的乘积,其中a[i]乘b[j]累加到c[i+j]上去
在最后对累加结果数组c作一次性进位(判断是否大于等于10)
知道上述原理,很容易就写出代码
#include <iOStream>
#include <string>
#include <alGorithm>
#include <string.h>
using namespace std;
int main()
{
//输入时处理,包含置0、逆置、转换成真实数字等步骤
string s;
cin >> s;
int n1 = s.length(); //长度
char str1[10];
memset(str1, 0, sizeof(str1));
for (int i = 0; i < n1;i++)
str1[i] = s[n1 - i - 1]-'0';
string s2;
cin >> s2;
int n2 = s2.length();
char str2[10];
memset(str2, 0, sizeof(str2));
for (int i = 0; i < n2;i++)
str2[i] = s2[n2 - i - 1]-'0';
char res[20];
memset(res, 0, sizeof(res));
//核心代码
int i, j;
for (i = 0; i < n1;i++)
for (j = 0; j < n2;j++)
res[i + j] += str1[i] * str2[j];
for (i = 0; i < n1 + n2;i++)
{
if(res[i]>=10)
{
res[i + 1] += res[i] / 10;
res[i] %= 10;
}
}
//从不为0的那一位开始输出(删除前导0),如果全部为0,则输出0
int k;
for (k = n1 + n2 - 1; !res[k]&&k>0; k--)
; //注意这个分号
for (int i = k; i >= 0; i--)
cout << int(res[i]);
cout << endl;
return 0;
}
到此这篇关于c++ 高精度乘法运算的实现的文章就介绍到这了,更多相关C++ 高精度乘法运算内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C++高精度乘法运算的实现
本文链接: https://www.lsjlt.com/news/177616.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0