两数相加
Posted zhou753099943
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两数相加相关的知识,希望对你有一定的参考价值。
/*
* 两数相加
* 给你两个非空链表,表示两个非负整数,它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字
* 请你将两个数字相加,并以相同的形式返回一个表示和的链表
* 你可以假设除了数字0之外,这两个数都不会以0开头。
*/
#include <list>
void TowNumSum()
{
// int data1 = 1378;
// int data2 = 178908;
// int data1 = 342;
// int data2 = 465;
// int data1 = 0;
// int data2 = 0;
int data1 = 9999999;
int data2 = 9999;
int data = data1 + data2;
std::cout<<"data:"<<data<<std::endl;
std::vector<int> num1;
std::vector<int> num2;
std::vector<int> num3;
int d = 10;
while (data1)
{
int d1 = data1 % d;
data1 /= d;
num1.push_back(d1);
}
while (data2)
{
int d2 = data2 % d;
data2 /= d;
num2.push_back(d2);
}
for (size_t i = 0; i < num1.size(); ++i)
{
if (i == 0)
std::cout<<"[";
std::cout<<num1[i];
if (i >= 0 && i < num1.size() - 1)
std::cout<<",";
if (i == num1.size() - 1)
std::cout<<"]";
}
std::cout<<std::endl;
for (size_t i = 0; i < num2.size(); ++i)
{
if (i == 0)
std::cout<<"[";
std::cout<<num2[i];
if (i >= 0 && i < num2.size() - 1)
std::cout<<",";
if (i == num2.size() - 1)
std::cout<<"]";
}
std::cout<<std::endl;
auto size = std::min(num2.size(), num1.size());
int per = 0;
for(size_t i = 0; i < size; ++i)
{
auto it1 = num1[i];
auto it2 = num2[i];
int data = it1 + it2 + per;
if (data >= 10)
{
data = data % 10;
per = 1;
}
else
per = 0;
num3.push_back(data);
}
for(size_t i = size; i < num2.size(); ++i)
{
int data = num2[i] + per;
if (data >= 10)
{
data = data % 10;
per = 1;
}
else
per = 0;
num3.push_back(data);
}
for(size_t i = size; i < num1.size(); ++i)
{
int data = num1[i] + per;
if (data >= 10)
{
data = data % 10;
per = 1;
}
else
per = 0;
num3.push_back(data);
}
if (per == 1)
num3.push_back(per);
if (num3.empty())
num3.push_back(0);
for (size_t i = 0; i < num3.size(); ++i)
{
if (i == 0)
std::cout<<"[";
std::cout<<num3[i];
if (i >= 0 && i < num3.size() - 1)
std::cout<<",";
if (i == num3.size() - 1)
std::cout<<"]";
}
std::cout<<std::endl;
}
以上是关于两数相加的主要内容,如果未能解决你的问题,请参考以下文章