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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

两数相加c语言实现

發(fā)布時(shí)間:2023/12/1 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两数相加c语言实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給定兩個(gè)非空鏈表來(lái)表示兩個(gè)非負(fù)整數(shù)。位數(shù)按照逆序方式存儲(chǔ),它們的每個(gè)節(jié)點(diǎn)只存儲(chǔ)單個(gè)數(shù)字。將兩數(shù)相加返回一個(gè)新的鏈表。

你可以假設(shè)除了數(shù)字 0 之外,這兩個(gè)數(shù)字都不會(huì)以零開(kāi)頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807 解題思路:我先開(kāi)始的思路是,再創(chuàng)建一個(gè)返回鏈表,然后將兩個(gè)數(shù)的和放到返回鏈表中返回,具體處理的時(shí)候,先檢查每一位相加時(shí)前面是不是有進(jìn)位,如果有進(jìn)位,則在相加的時(shí)候加上進(jìn)位的值,在計(jì)算出每一位的和之后,如果和的值小于10,則沒(méi)有進(jìn)位,進(jìn)位標(biāo)志位false,進(jìn)位值不做修改,如果有進(jìn)位,則進(jìn)位標(biāo)志位true,進(jìn)位值做相應(yīng)的修改。然后我的初始代碼如下: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {bool Carry=false;int Carry_Val=0;int temp; struct ListNode *p1,*p2,*Ret_List;p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;Ret_List=p1;p2=p1;while(l1&&l2){if(Carry){temp=Carry_Val+l1->val+l2->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;;Carry_Val=temp/10;}}else{temp=l1->val+l2->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;Carry_Val=temp/10;}}l1=l1->next;l2=l2->next;if(l1||l2){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}while(l1){if(Carry){temp=Carry_Val+l1->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;Carry_Val=temp/10;}}else{temp=l1->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;Carry_Val=temp/10;}}l1=l1->next;if(l1){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}while(l2){if(Carry){temp=Carry_Val+l2->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;Carry_Val=temp/10;}}else{temp=l2->val;if(temp<10){Carry=false;p2->val=temp;}else{Carry=true;p2->val=temp-10;Carry_Val=temp/10;}}l2=l2->next;if(l2){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}if(Carry){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;p2->val=Carry_Val;}return Ret_List;}這明顯太長(zhǎng)太長(zhǎng)了,中間有非常多的重復(fù)代碼。然后我發(fā)現(xiàn),我在計(jì)算Carry_Val(即進(jìn)位值)的值得時(shí)候,要判斷是不是有進(jìn)位,但是我發(fā)現(xiàn),當(dāng)有進(jìn)位的時(shí)候temp/10,能計(jì)算出進(jìn)位的值,但是,當(dāng)沒(méi)有進(jìn)位的時(shí)候,temp/10的值為0。這就為我提供了一個(gè)新的解題方法。代碼如下: struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {int Carry_Val=0;int temp; struct ListNode *p1,*p2,*Ret_List;p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;Ret_List=p1;p2=p1;while(l1&&l2){temp=l1->val+l2->val+Carry_Val;p2->val=temp%10;Carry_Val=temp/10;l1=l1->next;l2=l2->next;if(l1||l2){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}while(l1){temp=l1->val+Carry_Val;p2->val=temp%10;Carry_Val=temp/10;l1=l1->next;if(l1){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}while(l2){temp=l2->val+Carry_Val;p2->val=temp%10;Carry_Val=temp/10;l2=l2->next;if(l2){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;}}if(Carry_Val){p1=(struct ListNode*)malloc(sizeof(struct ListNode));p1->next=NULL;p2->next=p1;p2=p1;p2->val=Carry_Val;}return Ret_List;}可以看出,代碼量有了極大的簡(jiǎn)化。但是還有很多重復(fù)代碼,于是我就又進(jìn)行了改進(jìn),代碼如下: struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { int Carry_Val=0; int temp; struct ListNode *p1,*p2,*Ret_List; Ret_List=l1; while(l1&&l2){ temp=l1->val+l2->val+Carry_Val; l1->val=temp%10; Carry_Val=temp/10; p2=l1;l1=l1->next; l2=l2->next; } if(!l1){p2->next=l2;l1=p2->next;}while(l1){ temp=l1->val+Carry_Val; l1->val=temp%10; Carry_Val=temp/10;p2=l1;l1=l1->next; } if(Carry_Val){ p1=(struct ListNode*)malloc(sizeof(struct ListNode)); p1->next=NULL; p1->val=Carry_Val; p2->next=p1;} return Ret_List; }

這就很nice了,空間復(fù)雜度也極大的降低了。 歡迎留言評(píng)論交流。


總結(jié)

以上是生活随笔為你收集整理的两数相加c语言实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲黄色大片 | 久久久精品久 | 日韩精品一区二区三区无码专区 | 一区二区三区高清在线 | 色小说香蕉 | 天天色天天干天天 | 国产一二视频 | 99re这里只有精品6 | 天堂аⅴ在线最新版在线 | 99热香蕉 | 国产午夜精品福利视频 | 欧美xxxx性 | 成人av网页 | 欧美午夜精品久久久久久孕妇 | 色婷婷婷婷色 | 亚洲精品成人无码毛片 | 好吊日av | 337p日本欧洲亚洲大胆精筑 | 一本久久a精品一合区久久久 | 午夜精品久久久久久久99热浪潮 | 成人开心激情 | 五月色婷 | 亚洲国产精品无码观看久久 | 人人草av| 日韩人妻无码一区二区三区 | 精品日韩一区二区三区 | 成人在线免费视频 | 亚洲大片在线观看 | 亚洲综合网在线观看 | 青青啪啪| 国产三级国产精品国产专区50 | 曰女同女同中文字幕 | 末发成年娇小性xxxxx | 欧美大黄视频 | 人成精品| 岛国av在线播放 | 肌肉猛男裸体gay网站免费 | 国产精品美女久久久久av爽 | www.精品在线 | 欧美一级片观看 | 欧美日韩一区二区三区不卡视频 | 快播怡红院 | 久久无码人妻精品一区二区三区 | 国产片高清在线观看 | 亚洲天天干 | 性高跟鞋xxxxhd人妖 | 国产嫩草影院久久久 | 中国人与拘一级毛片 | 成年人在线免费看 | 五月天婷婷丁香花 | 波多野结衣av在线播放 | 欧美午夜一区二区三区 | 免费看黄色片子 | www.四虎影视 | 国产精品自拍电影 | 欧美另类综合 | 午夜在线观看视频18 | 日韩在线观看视频网站 | 国产亚洲精品久久久久丝瓜 | 亚洲欧美网址 | 亚洲另类在线观看 | 在线看毛片网站 | 免费看的黄网站 | 亚洲欧洲一区二区在线观看 | 亚洲国产日韩a在线播放性色 | 免费高清视频在线观看 | 在线永久看片免费的视频 | 痴汉电车在线播放 | 91成人精品一区在线播放 | 日本欧美在线观看 | 91免费观看网站 | 国产色图片| 天天干天天日夜夜操 | 色爽爽一区二区三区 | 四季av中文字幕 | 免费av网站在线 | 国产午夜久久久 | 懂色中文一区二区在线播放 | 亚洲黄色av网站 | 欧美一级片在线 | 亚洲aav | 800av免费在线观看 | 黑人干亚洲女人 | 亚洲h片| 狠狠躁夜夜躁人人爽视频 | 日韩性生活大片 | 午夜视频黄 | 国产免费久久精品国产传媒 | 日韩久久精品一区二区 | 韩国中文三级hd字幕 | 久久久在线视频 | 九九热超碰| 国产一级做a爰片久久毛片男男 | 久热精品视频在线 | 国产成人免费av一区二区午夜 | 先锋影音制服丝袜 | 在线播放无码后入内射少妇 | 四季av一区二区夜夜嗨 | 毛片网络 |