蓝桥杯练习1(两数逆序相加)
Posted 晨沉宸辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯练习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;
以上是关于蓝桥杯练习1(两数逆序相加)的主要内容,如果未能解决你的问题,请参考以下文章
算法笔记_062:蓝桥杯练习 最小乘积(基本型)(Java)