日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

-9 逆序输出一个整数的各位数字_leetcode两数相加(大整数相加)

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 -9 逆序输出一个整数的各位数字_leetcode两数相加(大整数相加) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目來源于leetcode第二題兩數相加。

題目描述

給出兩個非空的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式存儲的,并且它們的每個節點只能存儲一位數字。
如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。
例如說
輸入:
2 4 3
5 6 4
輸出:
7 0 8
因為342 + 465 = 807

思路

這道題很好啊,用的是大數運算的思想也叫高精度。就是說一個鏈表存儲一個數,一個節點存一個數位,進行加法運算。

有三個需要注意的地方。首先是如果一個數已經沒下一位了就沒必要再繼續下去了,就像這樣

因為是鏈表我直接就把下一位的地址接過來了。

然后就是可能會有某種極端情況,一直有進位,還有就是會出現結果位數比加數多的可能。就像下面這樣。

代碼實現

struct ListNode { int val; struct ListNode *next; };#define CARRY(a,b) a=1,b-=10 //高精度加法 struct ListNode* addTwoNumbers(struct ListNode* num1, struct ListNode* num2) { int add= 0; //p是最后結果 struct ListNode* p; p = num1; //進行第一次運算 num1->val += num2->val + add; //有進位 if (num1->val > 9) { CARRY(add, num1->val); } while (NULL != num1->next&&NULL != num2->next) { num1 = num1->next; num2 = num2->next; num1->val += num2->val+add; add = 0; if (num1->val > 9) { CARRY(add, num1->val); } } if (!num1->next)num1->next = num2->next;0 //進行最后的進位運算31 while (add){32 if (!num1->next) {33 num1->next = (struct ListNode*)malloc(sizeof(struct ListNode));34 num1->next->next = NULL;35 num1->next->val = 0;36 }37 num1 = num1->next;38 num1->val++;39 add = 0;40 if (num1->val > 9) {41 CARRY(add, num1->val);42 }43 } 44 return p;45}

總結

以上是生活随笔為你收集整理的-9 逆序输出一个整数的各位数字_leetcode两数相加(大整数相加)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。