精华内容
下载资源
问答
  • LeetCode-2 两数相加 C语言解题思路代码碰到的错误总结 解题思路 设置变量count和num。count表示两数相加后的进位,num为除10后的余数。 代码 /** * Definition for singly-linked list. * struct ListNode { * ...

    LeetCode-2 两数相加 C语言

    解题思路

    设置变量count和num。count表示两数相加后的进位,num为除10后的余数。

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
      
        int count=0;  //进位
        int num;  //余数
    
        struct ListNode *head=(struct ListNode*)malloc(sizeof(struct ListNode));  //头结点
        struct ListNode *tail;  //指向尾结点
        tail=head;
        tail->next=NULL;
    
        num=l1->val+l2->val+count;  //头结点初始化
        head->val=num%10;
        count=num/10;
        l1=l1->next;
        l2=l2->next;
        
        while(l1!=NULL&&l2!=NULL)
        {
            struct ListNode *p=(struct ListNode*)malloc(sizeof(struct ListNode));
    
            num=l1->val+l2->val+count;
            p->val=num%10;
            p->next=NULL;
            count=num/10;
            l1=l1->next;
            l2=l2->next;
    
            tail->next=p;
            tail=p;
        }
    
        if(l1==NULL&&l2==NULL)    //链表等长
        {
        }
        else if(l1!=NULL)   //l1长,后续只要保存l1的结点
        {
            while(l1!=NULL)
            {
                struct ListNode *p=(struct ListNode*)malloc(sizeof(struct ListNode));
                num=l1->val+count;
                p->val=num%10;
                p->next=NULL;
                count=num/10;
                l1=l1->next;
    
                tail->next=p;
                tail=p;
            }
        }
        else if(l2!=NULL)  l2长,后续只要保存l2的结点
        {
            while(l2!=NULL)
            {
                struct ListNode *p=(struct ListNode*)malloc(sizeof(struct ListNode));
                num=l2->val+count;
                p->val=num%10;
                p->next=NULL;
                count=num/10;
                l2=l2->next;
                tail->next=p;
                tail=p;
            }
        }
    
        if(count>=1)   //进位需要新加结点
            {
                struct ListNode *p=(struct ListNode*)malloc(sizeof(struct ListNode));
                p->val=count;
                p->next=NULL;
                tail->next=p;
                tail=p;
            }
    
        return head;
    }
    

    碰到的错误

    1.进位需要新加结点
    刚开始没有考虑到,提交后报错发现。
    2.执行报错
    Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type ‘struct ListNode’, which requires 8 byte alignment (ListNode.c)
    0xbebebebebebebebe: note: pointer points here

    tail->next=NULL没有写导致。

    总结

    两数相加这道题思路并不难但是从开始写到最后提交成功还是花了一段时间,可能是单链表有段时间没用到了导致比较慢,然后题目中一些特殊情况没有考虑到,比如最后进位不为0还有新增结点。

    展开全文
  • A+B两数相加 C语言算法竞赛 C语言 #include<stdio.h> int main(){ int a, b; // 接收控制台输入的变量 scanf("%d %d"); printf("%d",a + b); } C++语言 #include<iostream> using namespace std; ...

    A+B两数相加 C语言算法竞赛

    输入两个整数,求这两个整数的和是多少。

    输入格式
    输入两个整数A,B,用空格隔开,0≤A,B≤108
    输出格式
    输出一个整数,表示这两个数的和

    样例输入:

    3 4

    样例输出:

    7

    C语言

    #include<stdio.h>
    int main(){
    	int a, b; // 接收控制台输入的变量
    	scanf("%d %d");
    	printf("%d",a + b);
    }
    

    C++语言

    #include<iostream>
    
    using namespace std;
    
    int main(){
    	int a, b; // 接收控制台输入的变量
    	cin >> a >> b;
    	cout << a + b << endl;
    	return 0;
    }
    

    Java

    public class Add{
    	public static void main(String[] args){
    		Scanner in = new Scanner(System.in);
    		int a = in.nextInt(), b = in.nextInt();
    		System.out.println(a + b);
    	}
    }
    

    PHP

    $a = ?;
    $b = ?;
    echo $a + $b;
    

    MySql

    @a = ?;
    @b = ?;
    select @a + @b;
    

    JavaScript

    const a = prompt();
    const b = prompt();
    alert(+a + +b);
    

    Python

    a = int(input())
    b = int(input())
    print(a+b)
    
    展开全文
  • 两数相加返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 **********************************...
  • 题目:两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的...

    题目:两数相加

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807

    解答: 

    使用c语言时注意,链表的动态创建。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
        
        struct ListNode *r = (struct ListNode *)malloc(sizeof(struct ListNode));
        r->val = 0;
        r->next = NULL;
        
        struct ListNode *result = r;
    
        
        while(l1 || l2)
        {
            
            r->val += (l1 ? l1->val : 0) + (l2 ? l2->val : 0);
            
            
            if(r->val >= 10) {
                if(!r->next) {
                    r->next = (struct ListNode*)malloc(sizeof(struct ListNode));
                    r->next->val = 0; 
                    r->next->next = NULL;
                }
                r->next->val += (r->val / 10);
                r->val %= 10;
            }
    
            if(l1)
                l1 = l1->next;
            
            if(l2)
                l2 = l2->next;
            
            if(!r->next && (l1 || l2)) {
                r->next = (struct ListNode*)malloc(sizeof(struct ListNode));
                r->next->val = 0;
                r->next->next = NULL;
            }
            r = r->next;
        }
        
        return result;
    }

     

    展开全文
  • leedcode两数相加C语言

    2020-03-04 20:39:33
    如果,我们将这数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0开头。 例:输入[2,4,5] [1,6,2] 输出[3,0,8],即542+261=803 。输入[5] [5]输出[0,1...

    题目描述

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    例:输入[2,4,5] [1,6,2] 输出[3,0,8],即542+261=803 。输入[5] [5]输出[0,1],即5+5=10 。输入[5,1] [5] 输出[0,2],即15+5=20 。

    解题思路

    函数的输入值为两组链表l1和l2,输出为l3 。添加两个过程量p3和p4 。具体见注释。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    
    
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
        
        struct ListNode *l3 = (struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode *p3 = l3;//最初p3和l3是相同的地址,修改p3的内容即修改l3的内容
        
        int carry = 0;//低位是否满10进1
        int sum = 0;//当前位相加的和
        
        while( l1 && l2)//当前位两个数都不为0
        {
            sum = l1->val + l2->val + carry;
            carry = sum / 10 ;//求商,满10为1,否则为0
            sum = sum % 10;//求余,满10为sum-10,否则为sum
           
            struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
            p4->val = sum;
            p4->next = NULL;
            p3->next = p4;//第一次执行该语句时,相当于使l3的该节点指向p4
            p3 = p4;//执行此语句后,对(*p3)赋值便不能影响到l3
            
            l1 = l1->next;
            l2 = l2->next;  
            
        }
    
        while((l1&&!l2)||(!l1&&l2))//当前位有一个数为0
        {
            int value_1 = l1 ? (l1->val) : 0 ;
            int value_2 = l2 ? (l2->val) : 0 ;
            sum = value_1 + value_2 + carry ;
            carry = sum / 10 ;
            sum = sum % 10 ;
            
            struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
            p4->val = sum;
            p4->next = NULL;
            p3->next = p4;
            p3 = p4;//再往后,对(*p3)赋值便不能影响到l3
            
            l1 = l1 ? (l1->next) : NULL;
            l2 = l2 ? (l2->next) : NULL;
        }
    
        if(!l1 && !l2 && carry)//当前位两个数均为0,但是低位满10进1
        {
            struct ListNode *p4 = (struct ListNode*)malloc(sizeof(struct ListNode));
            p4->val = carry;
            p4->next = NULL;
            p3->next = p4;  
        }
         
        return l3->next;//从l3的第二个节点开始赋值,所以从l3->next开始输出
       
    }
    

     

    展开全文
  • 如果,我们将这数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -&...
  • LeetCode#2 两数相加 题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新...
  • 数相加c语言两数相加c语言两数相加c语言
  • 将链表中的元素转换为整数,根据相加后的值再生成一个链表。 链表转整数函数: int link_list2int(struct ListNode* ll) { int i = 1; int result = 0; struct ListNode* p = ll; while(p != NULL) { result ...
  • //相加的和 struct ListNode * b = ( struct ListNode * ) malloc ( sizeof ( struct ListNode ) ) ; b -> val = x % 10 ; //创建一个数值为 (sum mod 10)的新结点 //并将其设置为当前结点的...
  • 两数相加 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的...
  • 用链表实现两数相加,简单的是这道题的数字使倒序给我们的,所以直接从第一结点开始相加,若大于10则进位即可,我想的是只要到达的两个链表的结点都不为空,则相加取余存在新的结点中,加在新链表上,用sum储存取整...
  • 如果,我们将这数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 ...
  • if(k>j-1)//当第二个已经没有可供相加的数字时。 { save[count++]=(num1[p++]+ModNum)%10;//加法 ModNum=(num1[p-1]+ModNum)/10;//取余以便进位到一位。 printf("\n%d\n",save[count-1]); continue; } if...
  • //搜寻指针指向链表头节点 pl1 = l1; pl2 = l2; while(pl1 || pl2) { //l1达到末尾 if(pl1==NULL) { add = pl2->val; } //l2达到末尾 else if(pl2==NULL) { add = pl1->val; } //都没达到末尾 ...
  • 如果,我们将这数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这个数都不会以 0开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -...
  • leetcode 2. 两数相加 C语言

    千次阅读 2018-10-14 13:16:38
    struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) { struct ListNode* l = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* p = l1,* q = l2, * t = l;...
  • 由于我们学院(没错就是信通弟弟学院)辅导员的神操作(在我们没学数据...最后说一句,C语言写的的确很长,不如py或者Java的行数少得多,但是我C的运行快啊,而且内存空间才9MB,很少的(同等8ms的Java用了44MB)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 704
精华内容 281
关键字:

两数相加c语言

c语言 订阅