Rumah > pembangunan bahagian belakang > C++ > Tambahkan dua nombor yang diwakili oleh senarai terpaut

Tambahkan dua nombor yang diwakili oleh senarai terpaut

WBOY
Lepaskan: 2023-08-25 12:57:03
ke hadapan
711 orang telah melayarinya

Tambahkan dua nombor yang diwakili oleh senarai terpaut

Di sini kita akan melihat cara menambah dua nombor yang disimpan dalam senarai terpaut yang berasingan. Dalam senarai terpaut, setiap digit nombor disimpan. Jika nombornya ialah 512 maka ia akan disimpan seperti di bawah -

512 = (5)-->(1)-->(2)-->NULL
Salin selepas log masuk

Kami disediakan dua senarai jenis ini dan tugas kami adalah untuk menambahnya dan mendapatkan hasilnya selepas mengira jumlahnya. Di sini kami menggunakan senarai terpaut C++ STL. Mari lihat algoritma untuk mendapatkan idea yang lebih baik untuk pertaruhan.

Algoritma

addListNumbers(l1, l2)

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
Salin selepas log masuk

Contoh

#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);
}
Salin selepas log masuk

Output

First number: 512
Second number: 14578
Result: 15090
Salin selepas log masuk

Atas ialah kandungan terperinci Tambahkan dua nombor yang diwakili oleh senarai terpaut. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan