链表或字符串模拟加法、加一及乘法

链表模拟加法/字符串模拟二进制加法/数组模拟加一操作/打印1到最大的n位数/字符串模拟乘法

============================================

Add Two Numbers

两个链表代表两个数字,每个结点的值都是一位数字,单链表逆序存放这两个数字,

构造出一个新的链表,代表这两个链表的和。

链表的尾插法,头结点dummy结点的运用,统一对prev指针的操作,

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution
{
public:
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
    {
        /*头结点,dummy主要是为了保持prev的统一操作*/
        ListNode dummy(-1);
        int carry = 0;
        ListNode *prev = &dummy;
        ListNode *p1 = l1, *p2 = l2;
        while(p1 != NULL || p2 != NULL)
        {
            const int aCur = (p1 == NULL) ? 0 : p1->val;
            const int bCur = (p2 == NULL) ? 0 : p2->val;
            const int value = (aCur + bCur + carry) % 10;
            carry = (aCur + bCur + carry) / 10;
            /*尾插法*/
            prev->next = new ListNode(value);

            p1 = (p1 == NULL) ? NULL : p1->next;
            p2 = (p2 == NULL) ? NULL : p2->next;
            prev = prev->next;
        }
        if(carry > 0)
        {
            prev->next = new ListNode(carry);
        }
        return dummy.next;
    }
};

Add Binary

两个字符串模拟二进制的加法,二进制的字符串都是正序存放的,区别于链表模拟加法的题目,

插入的时候,有头插法和尾插法。这里显然要用到头插法。

class Solution
{
public:
    string addBinary(string a, string b)
    {
        string result;
        const int n = a.size() > b.size() ? a.size() : b.size();
        /*反转过来,然后从左到右计算*/
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());

        int carry = 0;
        for(int i = 0; i < n; ++i)
        {
            /*有一方,超过了长度就把这一方的设置为0*/
            const int aCur = i < a.size() ? a[i] - '0' : 0;
            const int bCur = i < b.size() ? b[i] - '0' : 0;
            /*余数*/
            const int val = (aCur + bCur + carry) % 2;
            /*进位*/
            carry = (aCur + bCur + carry) / 2;

            /*头插法*/
            result.insert(result.begin(), val + '0');
        }
        if(carry == 1)
        {
            result.insert(result.begin(), '1');
        }
        return result;
    }
};

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串
, int
, null
, 结点
, 模拟
, c语言 链表 加法
, 加法
, 加法操作
乘法模拟
链表加法、二年级乘法加减法混合、excel加法公式 加一列、加法原理和乘法原理、乘法对加法的分配律,以便于您获取更多的相关知识。

时间: 2024-08-21 21:26:31

链表或字符串模拟加法、加一及乘法的相关文章

联展营销的减法、加法、除法和乘法

互联网广告(营销)在最近几年创新不断,一会儿竞价:一会儿效果:一会而精准:一会儿视频:一会儿2.0:一会儿口碑...... 一直以来有一个互联网广告(营销)创新虽然比不上上面提到的风光和辉煌,甚至有点拿不上台面,但由于笔者和他们中的主创者和从业者交往甚多,有所了解和感悟,今日也总结一下,供真正的创造者和从业专家指正. 这个我认为潜伏在风光互联网广告下面的真正创新就是"联展营销"! "联展营销"通俗的定义就是在一个页面(也可能是一个网站)上堆列出同类型同行业广告客户的

用jQuery模拟页面加载进度条的实现代码_jquery

因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载了多少,而后用jq模拟出一个进度条来显示. 首先我们先画一个进度条的样子,也就是上图图中的样子,这个不用过多说明,自己看代码 CSS 复制代码 代码如下: *{margin:0;padding:0;font-size:12px} .loading{position:relative;top:0;le

基于jQuery实现模拟页面加载进度条_jquery

因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载了多少,而后用jq模拟出一个进度条来显示. 首先我们先画一个进度条的样子,也就是上图图中的样子,这个不用过多说明,自己看代码 CSS 复制代码 代码如下: .loading{position:relative;top:0;left:0} .tip1{float:left;background:#A7

链表-关于长整数的加法,怎么修改下面的代码

问题描述 关于长整数的加法,怎么修改下面的代码 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct node{ int data; struct node *prior; struct node *next; } node;//双向链表结构体定义 int main() { node *num1,*num2,*sum; node *create(node *n); int ou

字符串模拟if else判断语句,急求思路答案啊。。

问题描述 用户输入条件判断语句,然后我要分析出条件分支,得到公式结果.如:IF(Q>40&Q<100)THEN{Y3=0.9;}ElSEIF(Q>=100&Q<450)THEN{Y3=0.92;}ELSE{Messagebox.show("取值未在条件范围内");}ENDIF以上例子中红色部分为用户自己任意输入,请问有没有算法可以对包含"<,>&,|,!"类似逻辑运算法解析的啊.然后再根据if条件,解析TH

C#使用双链表来简单模拟IE前进后退功能

简单的测试了一下IE前进和后退的过程. 依次访问网站A,B,C,D. 后退至 B, 然后重新请求网站E, 则记录的保存顺序则是 A,B,E C,D将会从记录列表中删除. 下面看代码(以下操作均在内存中进行): 一个History对象,用来生成一个记录对象,该对象包含 url,title,html三个属性. class History { private string Title_ = ""; private string WmlSource_ = ""; priva

string-Android中程序化加载字符串数组

问题描述 Android中程序化加载字符串数组 我有一个类StringsA,在这个类中有一个字符串列表. public class StringsA {static String Names[] = {""Larry""Moe""Curly""John""}; } 在主类中有一个button和textview.我想实现的是每次当按钮被点击时,textview能用.setText从字符串中调用一个不同的名字.

JS实现窗口加载时模拟鼠标移动的方法_javascript技巧

本文实例讲述了JS实现窗口加载时模拟鼠标移动的方法.分享给大家供大家参考.具体实现方法如下: function judge(){ alert("mousemove"); document.onmousemove = null;//撤销鼠标移动模拟 } function simulateMouseMove(){//模拟鼠标移动 document.onmousemove = judge; } window.onload=simulateMouseMove;//窗口加载 希望本文所述对大家的

请教一个穷举的算法:)列出字符串

问题描述 问题描述:现在想从ABCD四个字符想穷举后得到:ABCDAAABACADAAAAABAACAADABAABBABCABDACAACBACCACDADAADBADCADD.....DDDDD等等,不计各个位数,但最长的长度为5即DDDDD,求出各种字符组合.请教高手指点:) 解决方案 解决方案二:四进制!!!代码就不用写了吧解决方案三:请问要怎么做四进制呢?还有要是如果字符更多,穷举的长度也变长呢?请教:)解决方案四:又是一个全排列问题.解决方案五:楼上的有好招么?请教:)解决方案六:[