여기에서는 별도의 연결 목록에 저장된 두 개의 숫자를 추가하는 방법을 살펴보겠습니다. 연결리스트에는 숫자의 각 자리가 저장됩니다. 숫자가 512이면 아래와 같이 저장됩니다. -
512 = (5)-->(1)-->(2)-->NULL
이 유형의 두 가지 목록이 제공되며 우리의 작업은 이를 추가하고 합계를 계산한 후 결과를 얻는 것입니다. 여기서는 C++ STL 연결리스트를 사용합니다. 베팅에 대한 더 나은 아이디어를 얻기 위해 알고리즘을 살펴보겠습니다.
Begin Adjust the l1 and l2 lengths by adding leading 0s with the smaller one carry := 0 res := an empty list for each node n from l1, scan from last to first, do item := (l1.item + l2.item + carry) mod 10 insert item at the beginning of res carry := (l1.item + l2.item + carry) / 10 done if carry is not 0, then add carry at the beginning of res end if return res End
#include<iostream> #include<list> using namespace std; list addListNumbers(list<int> l1, list<int> l2){ //add leading 0s to the shortest number to make them equal length if(l1.size() > l2.size()){ for(int i = l2.size(); i != l1.size(); i++){ l2.push_front(0); } }else if(l1.size() < l2.size()){ for(int i = l1.size(); i != l2.size(); i++){ l1.push_front(0); } } list<int>::reverse_iterator it1 = l1.rbegin(); list<int>::reverse_iterator it2 = l2.rbegin(); list<int> result; int carry = 0; while(it1 != l1.rend()){ result.push_front((*it1 + *it2 + carry) % 10); carry = (*it1 + *it2 + carry) / 10; it1++; it2++; } if(carry != 0){ result.push_front(carry); } return result; } list<int> numToList(int n){ list<int> numList; while(n != 0){ numList.push_front(n % 10); n /= 10; } return numList; } void displayListNum(list<int> numList){ for(list<int>::iterator it = numList.begin(); it != numList.end(); it++){ cout<<*it; } cout << endl; } int main() { int n1 = 512; int n2 = 14578; list<int> n1_list = numToList(n1); list<int> n2_list = numToList(n2); list<int> res = addListNumbers(n1_list, n2_list); cout << "First number: "; displayListNum(n1_list); cout << "Second number: "; displayListNum(n2_list); cout << "Result: "; displayListNum(res); }
First number: 512 Second number: 14578 Result: 15090
위 내용은 연결리스트로 표현되는 두 숫자 더하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!