蓝桥杯练习1(两数逆序相加)

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
在这里插入图片描述
Python版本

import math
#头插法建立链表
class Node():
    def __init__(self, item):
        self.item = item
        self.next = None


def create_linklist_tail(li):
    head = Node(li[0])
    tail = head
    for e in li[1:]:
        node = Node(e)
        tail.next = node
        tail = node
    return head
#定义了输出格式
def create_linklist_head(li):
    head = Node(li[0])
    for e in li[1:]:
        node = Node(e)
        node.next = head
        head = node
    return head
def print_linklist(lk):
    while lk.next:
        print(lk.item, end=',')
        lk = lk.next
    print(lk.item)
str1 = input()
str2 = input()
#两个输入
li1 = []
li2 = []
for i in str1:
	if i.isdigit():
		li1.append(i)

for j in str2:
	if j.isdigit():
		li2.append(j)

demo1 = create_linklist_tail(li1)
demo2 = create_linklist_tail(li2)
i = 0
sum1 = 0
lk1 = demo1
while lk1:
	sum1=sum1+(int(lk1.item)*math.pow(10,i))
	lk1=lk1.next
	i=i+1
lk2 = demo2
i = 0
sum2 = 0
while lk2:
	sum2=sum2+(int(lk2.item)*math.pow(10,i))
	lk2=lk2.next
	i=i+1

end = sum1 + sum2
end = int(end)
string = str(end)

demo = create_linklist_head(string)

print_linklist(demo)


C语言

#include <iostream>

#include <cstdio>

#include <cstring>



using namespace std;

#define N 1000000



int a[N];

int b[N];

int ans[N];

char s[N];

int main(){

   int t=0,l=0;

    scanf("%s",&s);

    for(int i=0;i<strlen(s);i++) {

      if(s[i]==',') continue;

      a[t++]=s[i]-'0';



    }



    scanf("%s",&s);



    for(int i=0;i<strlen(s);i++){



      if(s[i]==',') continue;



      b[l++]=s[i]-'0';



    }

    while(t<l) a[t++]=0;

    while(l<t) b[l++]=0;

    int m=0;

    for(int i=0;i<t;i++){

        ans[i]=(a[i]+b[i]+m)%10;

       m=(a[i]+b[i]+m)/10;

    }

    if(m>0) ans[t++]=m;

    for(int i=0;i<t-1;i++) printf("%d,",ans[i]);

    printf("%d\n",ans[t-1]);

    return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值