1、415. 字符串相加

  给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

  思路:和链表相加类似,求进位。

class Solution {
public:
string addStrings(string nums1, string nums2) {
string res;
if(nums1.empty() || nums2.empty())
return res;
int m=nums1.size()-;
int n=nums2.size()-;
int carry=;
while(m>= || n>=)
{
int a = m>= ? nums1[m--]-'' : ;
int b = n>= ? nums2[n--]-'' : ;
int sum = a+b+carry;
res.insert(res.begin(),sum%+'');
carry = sum/;
}
return carry ? ''+res : res;
}
};

2、43. 字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

输入: num1 = "2", num2 = "3"
输出: "6"

示例 2:

输入: num1 = "123", num2 = "456"
输出: "56088"

首先我们把每一位相乘,得到一个没有进位的临时结果,如图中中间的一行红色数字就是临时结果,然后把临时结果从低位起依次进位。对于一个m位整数乘以n位整数的结果,最多只有m+n位。

注意:结果中需要去掉前导0,还需要注意结果为0的情况

class Solution {
public:
string multiply(string num1, string num2) {
string res;
if (num1.empty() || num2.empty())
return res;
int n1 = num1.size();
int n2 = num2.size();
vector<int> vec(n1 + n2, );
int k = n1 + n2 - ;
// 计算对应位置相乘
for (int i = ; i<n1; i++)
{
for (int j = ; j<n2; ++j)
vec[k - i - j] += (num1[i] - '') * (num2[j] - '');
}
int carry = ;
for (int i = ; i<(n1 + n2); ++i) // 求进位
{
vec[i] += carry;
carry = vec[i] / ;
vec[i] %= ;
}
int i = k + ;
while (vec[i] == )
i--;//去掉乘积的前导0
if (i < )
return ""; //注意乘积为0的特殊情况
for (; i >= ; i--)
res.push_back(vec[i] + '');
return res; }
};

 3、打印最大n位数

  输入数字n,顺序打印从1到n位的数,1,2,3.....999

  使用大数字符串,全排列递归打印。

void printNum(vector<char> &num)
{
bool flag = true;
for (int i=; i <num.size() ; ++i)
{
if (flag && num[i] != '')
flag = false;
if (!flag)
cout << num[i];
}
cout << " ";
} void maxNum(vector<char> &num, int n, int index)
{
if (index == n - )
{
printNum(num);
return;
}
for (int i = ; i < ; ++i)
{
num[index+] = i + '';
maxNum(num, n, index + );
}
} int main()
{
int n;
while (cin>>n)
{
vector<char> num(n+);
num[n] = '\0';
for (int i = ; i < ; ++i)
{
num[] = i + '';
maxNum(num, n, );
}
cout << endl;
} system("pause");
return ;
}

代码题(59)— 字符串相加、字符串相乘、打印最大n位数的更多相关文章

  1. [LeetCode]415. 字符串相加、43. 字符串相乘

    题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...

  2. 【转】String字符串相加的问题

    String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...

  3. String 字符串相加比较

    String 字符串相加 对比 public static void main(String[] args) { String a = "helloword"; final Str ...

  4. leecode刷题(16)-- 字符串转换整数

    leecode刷题(16)-- 字符串转换整数 字符串转换整数 描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格 ...

  5. leecode刷题(13) -- 字符串中的第一个唯一字符

    leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...

  6. [LeetCode] 大数问题,相加和相乘,题 Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  7. noi题库 1.7 字符串

    前九题 01:统计数字字符个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字 ...

  8. String字符串相加的原理

    因为String是非常常用的类, jvm对其进行了优化, jdk7之前jvm维护了很多的字符串常量在方法去的常量池中, jdk后常量池迁移到了堆中 方法区是一个运行时JVM管理的内存区域,是一个线程共 ...

  9. T-SQL字符串相加之后被截断的那点事

    本文出处:http://www.cnblogs.com/wy123/p/6217772.html 字符串自身相加, 虽然赋值给了varchar(max)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...

随机推荐

  1. DumpBinary

    stdafx.h #include "targetver.h" #include <stdio.h> #include <tchar.h> #include ...

  2. PHP判断是手机端访问还是PC端访问网站

    Mobile_Detect 是一个轻量级的开源移动设备(手机)检测的 PHP Class, 它使用 User-Agent 中的字符串,并结合 HTTP Header,来检测移动设备环境. 这个设备检测 ...

  3. EM算法(expectation maximization)

    EM算法简述 EM算法是一种迭代算法,主要用于含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步完成: E步,求期望 M步,求极大. EM算法的引入 如果概率模型的变 ...

  4. Oracle学习笔记—Oracle左连接、右连接、全外连接以及(+)号用法(转载)

    转载自: Oracle左连接.右连接.全外连接以及(+)号用法 对于外连接,Oracle中可以使用“(+)”来表示. 关于使用(+)的一些注意事项: (+)操作符只能出现在WHERE子句中,并且不能与 ...

  5. PyQt4测试安装ok的程序

    # -*- coding: utf-8 -*- """ ------------------------------------------------- File Na ...

  6. 【WEB HTTP】集成点:网关、隧道及中继

    网关:网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法.网关是资源与应用程序之间的粘合剂. 在不同http版本之间进行转换的Web代理和网关一样,他们会执行复杂的逻辑,以便在各个端点之间进 ...

  7. 剑指offer面试54题

    面试54题: 题目:二叉搜索树的第K大节点 题:给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 解题思 ...

  8. 剑指offer 面试57题

    面试57题: 题目:和为s的数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输出描述: 对应每个测 ...

  9. jQuery:自学笔记(3)——操作DOM

    jQuery:自学笔记(3)——操作DOM 修改元素的属性 获取元素属性 设置元素属性 修改元素的内容 说明 有三种方式可以获取HTML元素的内容,分别是 ☐ text():设置或返回所选元素的文本内 ...

  10. Bootstrap主题库

    主题 https://startbootstrap.com/template-categories/all/ https://bootstrapmade.com/ http://www.jqueryf ...