高精度乘法(正整数)

来源:互联网 发布:neu的数据分析 编辑:程序博客网 时间:2024/05/17 01:37

高精度正整数乘法,包含了高精度正整数的加法。就是最简单的字符串处理,注意一些细节就行。某个oj上编译错误了好几发,后来发现to_string是c++11支持的,自己重写了to_string才AC。

代码如下:

// 1036.cpp : 定义控制台应用程序的入口点。// 大整数乘法#include "stdafx.h"#include <iostream>#include <string>#include <algorithm>#include <vector>using namespace std;//大整数加法string add(string s1, string s2){reverse(s1.begin(), s1.end());reverse(s2.begin(), s2.end());int max_size = s1.size() > s2.size() ? s1.size() : s2.size();//统一长度if (s1.size() > s2.size()){int diff = s1.size() - s2.size();for (int i = 0; i < diff; i++){s2.push_back('0');}}else{int diff = s2.size() - s1.size();for (int i = 0; i < diff; i++){s1.push_back('0');}}int flag = 0;string ans;for (int i = 0; i < max_size; i++){int cur = (s1[i] - '0') + (s2[i] - '0') + flag;if (cur >= 10){ans.push_back(cur - 10 + '0');flag = 1;}else{ans.push_back(cur + '0');flag = 0;}}if (flag != 0)ans.push_back(flag + '0');reverse(ans.begin(), ans.end());return ans;}//大整数乘法string product(int a, int b){string a_ = to_string(a);string b_ = to_string(b);int temp = 0;vector<string> nums;int cnt = 0;for (int i = b_.size() - 1; i >= 0; i--){int flag = 0;string s;for (int k = 0; k < cnt; k++)s.push_back('0');++cnt;for (int j = a_.size() - 1; j >= 0; j--){int cur = (b_[i] - '0')*(a_[j]-'0') + flag;if (cur >= 10){s.push_back((cur % 10) + '0');flag = cur / 10;}else{s.push_back(cur + '0');flag = 0;}}if (flag != 0)s.push_back(flag + '0');reverse(s.begin(), s.end());nums.push_back(s);}string ans = "";for (int i=0;i<nums.size();i++){ans=add(ans, nums[i]);}return ans;}int main(){int a, b;cin >> a >> b;cout << product(a, b) << endl;system("pause");return 0;}


运行结果:



原创粉丝点击