这是我根据所需条件设计的一种简单方法:(考虑数据类型为DT 的向量v1 和v2)
-
大小差异:对于向量大小不等的情况,您可以使用
std::vector<>::insert(iterator, 0) 将迭代器设置为开头,简单地在末尾附加 0,因为您需要零首先进行适当的元素到元素添加。不过在此之前,请检查两个向量中哪个更大,然后收集差异并在循环中插入相同的次数:
int diff;
if(v1.size() > v2.size())
{ diff = v1.size() - v2.size();
for(int i = 0; i < diff; ++i)
v2.insert(v2.begin(), 0);
}
else
{ diff = v2.size() - v1.size();
for(int i = 0; i < diff; ++i)
v1.insert(v1.begin(), 0);
}
-
加法: 现在向量大小相同,您可以使用
functional 标头中的 std::plus 将一个向量(例如 v1)的元素添加到另一个向量(v2 ) 元素方面,在 std::transform 中放置适当的迭代器位置:
std::transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), std::plus<DT>());
这会将v1 和v2 的元素总和收集到v1(可互换)中。唯一需要处理的问题或条件是元素加法总和大于或等于 10 的情况下的溢出。
-
溢出:对于向量中除第一个元素(在第 0th 索引处)之外的所有元素,我们需要将
1 携带/添加到中的下一个元素溢出的情况 (>=10) 并在除以 10 时将当前向量元素分配给其余数。但是,对于第一个溢出的元素,我们需要将另一个元素分配给向量的开头(例如:{3, 1 } + {9, 2} = {1, 2, 3}) ,这将是 1 (考虑单个数字向量元素),我们可以对其施加单独的 if 语句:
for(int i = v1.size(); i > 0; --i)
{
if(i == 1 && v1[1] >= 10)
{ v1[1] %= 10;
v1.insert(v1.begin(), 1);
}
else if(i != 1 && v1[i-1] >= 10)
{ v1[i - 1] %= 10;
v1[i - 2] += 1;
}
}
例子:
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#define DT long long int
int main()
{
std::vector<DT> v1 = {5, 2, 5, 7, 8};
std::vector<DT> v2 = {4, 5, 6};
// 52578
// 00456
// -----
// Expected output: // 53034
// Size management:
int diff;
if(v1.size() > v2.size())
{ diff = v1.size() - v2.size();
for(int i = 0; i < diff; ++i)
v2.insert(v2.begin(), 0);
}
else
{ diff = v2.size() - v1.size();
for(int i = 0; i < diff; ++i)
v1.insert(v1.begin(), 0);
}
// Element-wise addition:
std::transform(v1.begin(), v1.end(), v2.begin(), v1.begin(),std::plus<DT>());
// Overflow management:
for(int i = v1.size(); i > 0; --i)
{
if(i == 1 && v1[1] >= 10)
{ v1[1] %= 10;
v1.insert(v1.begin(), 1);
}
else if(i != 1 && v1[i - 1] >= 10)
{ v1[i - 1] %= 10;
v1[i - 2] += 1;
}
}
// Display the sum:
for(auto v:v1)
std::cout << v;
}
输出:53034。
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#define DT long long int
int main()
{
std::vector<DT> v1 = {5, 2, 5, 7};
std::vector<DT> v2 = {9, 3, 7, 2};
// 5257
// 9372
// -----
// Expected output: // 14629
// Size management:
int diff;
if(v1.size() > v2.size())
{ diff = v1.size() - v2.size();
for(int i = 0; i < diff; ++i)
v2.insert(v2.begin(), 0);
}
else
{ diff = v2.size() - v1.size();
for(int i = 0; i < diff; ++i)
v1.insert(v1.begin(), 0);
}
// Element-wise addition:
std::transform(v1.begin(), v1.end(), v2.begin(), v1.begin(),std::plus<DT>());
// Overflow management:
for(int i = v1.size(); i > 0; --i)
{
if(i == 1 && v1[1] >= 10)
{ v1[1] %= 10;
v1.insert(v1.begin(), 1);
}
else if(i != 1 && v1[i-1] >= 10)
{ v1[i - 1] %= 10;
v1[i - 2] += 1;
}
}
// Display the sum:
for(auto v:v1)
std::cout << v;
}
输出:14629。