大数相乘
发布时间:2020-12-14 02:20:06 所属栏目:大数据 来源:网络整理
导读:这个程序的思路是这样的 比方说 输入17*15 第一步先将输入的字符串类型转换成int类型的向量并反向从低位到高位进行存储 就是 在int向量中 为 7 1 和 5 1 先存低位再存高位 这样 做的主要目的是为了 方便计算时的进位操作 (7,1 )*(5,1)得(35,12,1) 再将(35
这个程序的思路是这样的 比方说 输入17*15 但是实现比较复杂! #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define NUMOFTEP 200
using namespace std;
struct Dashucheng
{
string a;
string b;
string result;
};
void strtonum(Dashucheng &c,vector <int> &d,vector <int> &e);//将输入的代表数字的字符串转换成数组并从低位开始存储
void numtostr(Dashucheng &c,vector <int>& rst);//将rst计算结果逆向存储进c中的result字符串中
void computer(Dashucheng &c);//将a和b代表的数相乘将结果存入result中
void strtonum(Dashucheng &c,vector <int> &e)
{
int n1=c.a.length();
int n2=c.b.length();
for(int i=0;i<n1;i++)
{
d.push_back(int(c.a[n1-i-1]-'0'));
}
for(int i=0;i<n2;i++)
{
e.push_back(int(c.b[n2-i-1]-'0'));
}
}
void numtostr(Dashucheng &c,vector <int> &rst)
{
int n1=rst.size();
for(int i=0;i<n1;i++)
{
c.result.push_back(char(rst[n1-i-1]+'0'));
}
}
void computer(Dashucheng &c)
{
vector <int>d;
vector <int>e;
vector <int>rst;
int temp[NUMOFTEP];
strtonum(c,d,e);//将c中的a和b转化成Int类型的向量并从低位到高位逆向存储
/* *从低位到高位进行计算 */
int size,size1,size2;
size1=d.size();
size2=e.size();
for(int i=0;i< NUMOFTEP;i++)//因为rst为向量类型不可以直接随机访问 得先赋值后再访问 所以把结果先存入temp数组中
{
temp[i]=0;
}
for(int i=0;i<size1;i++)
for(int j=0;j<size2;j++)
{
temp[i+j]=temp[i+j]+d[i]*e[j];
//rst[i+j]=d[i]*e[j];
}
for(int i=0;i<=size1+size2-2;i++)
{
rst.push_back(temp[i]);
}
/* *清除高位多余的0 */
size=rst.size();
for(int i=size-1;i>=0;i--)
{
if(rst[i]!=0)
break;
else
rst.pop_back();
}
/* *低位到高位进行进位操作 */
size=rst.size();
int jinwei=0;
for(int i=0;i<size;i++)
{
rst[i]+=jinwei;
jinwei=rst[i]/10;
rst[i]=rst[i]%10;
}
if(jinwei!=0)rst.push_back(jinwei);//如果最后一次进位不为0则放在最高位
numtostr(c,rst);//将rst 向量代表的结果存入c中的result中并从高位到低位存储
}
int main(int argc,char *argv[])
{
struct Dashucheng dashu;
cin>>dashu.a>>dashu.b;
computer(dashu);
//printf("%sn",dashu.result);
cout<<dashu.result<<endl;
system("pause");
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |