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

大数相乘

发布时间:2020-12-14 02:20:06 所属栏目:大数据 来源:网络整理
导读:这个程序的思路是这样的 比方说 输入17*15 第一步先将输入的字符串类型转换成int类型的向量并反向从低位到高位进行存储 就是 在int向量中 为 7 1 和 5 1 先存低位再存高位 这样 做的主要目的是为了 方便计算时的进位操作 (7,1 )*(5,1)得(35,12,1) 再将(35

这个程序的思路是这样的 比方说 输入17*15
第一步先将输入的字符串类型转换成int类型的向量并反向从低位到高位进行存储 就是 在int向量中 为 7 1 和 5 1 先存低位再存高位 这样 做的主要目的是为了 方便计算时的进位操作
(7,1 )*(5,1)得(35,12,1) 再将(35,1)做进位处理 左边是低位右边是高位这个进位操作就显得很简单了 (5,15,1)->(5,5,2)最后再将 (5,2)逆序 按从高位到低位的顺序显示就行了
这个算法的时间复杂度为n2 当然分治法可以降低时间复度

这里写图片描述


但是实现比较复杂!

#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");
}

(编辑:李大同)

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

    推荐文章
      热点阅读