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

大数乘法C++实现

发布时间:2020-12-14 03:10:30 所属栏目:大数据 来源:网络整理
导读:#include iostream#include string#include vector#include stdlib.h#include assert.h#include thread#include condition_variable#include atomic #include chronousing namespace std;const int MAX_THREADS_COUNT = 8;unsigned long m,n;int* tVal;void
#include <iostream>
#include <string>
#include <vector>
#include <stdlib.h>
#include <assert.h>
#include <thread>
#include <condition_variable>
#include <atomic> 
#include <chrono>

using namespace std;

const int MAX_THREADS_COUNT = 8;
unsigned long m,n;
int* tVal;

void muladd(string const& a,string const& b,int flag) {
	long pos = 0,value = 0;

	for(long i=0; i< m; i++) {
		if(i%MAX_THREADS_COUNT != flag)  continue;
		for(long j=0;j<n;j++) {
			pos = (m - 1 - i) + (n - 1 - j);
			value = (a.at(i) - '0') * (b.at(j) - '0');
			tVal[pos] += value;
		}
	}
}

string mul(string a,string b) {
    string res = "";
	
	m = a.length();
	n = b.length();
	tVal = new int[m+n];
	cout<<"m="<<m<<",n="<<n<<endl;
	for(long i=0; i< m + n; i++) {
		tVal[i] = 0;
	}
	
	std::thread* threads = new std::thread[m];
	for(int i=0; i< MAX_THREADS_COUNT; i++) {
		threads[i] = std::thread(muladd,a,b,i);
	}
	
	for(int i=0; i< MAX_THREADS_COUNT; i++) 
		threads[i].join();

	cout<<"m + n="<<m + n<<endl;	
 	for(long i=0; i< m + n; i++) {
		if(tVal[i] > 9) {
			tVal[i+1] += tVal[i]/10;
			tVal[i] %= 10;
		}
	} 
	
	for(long i=m+n-1; i>=0; i--) {
		if(tVal[i] == 0 && !res.compare("")) continue;
		res += (tVal[i] + '0');
	}

	return res;
}

int main()
{
    string a,c;
    cin>>a>>b;
	c=mul(a,b);
    cout<<c<<endl;
    return 0;
}

g++ -std=c++11 -pthread -o mul?mul.cpp

(编辑:李大同)

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

    推荐文章
      热点阅读