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. box-shadow阴影效果

    .shadowBox{ -moz-box-shadow:5px 5px 5px #A9A9A9; -webkit-box-shadow:5px 5px 5px #A9A9A9; box-shadow: ...

  2. 安装CentOS 7.4 可能会出现的坑以及解决方案

    安装CentOS 7.4 可能会出现的坑以及解决方案 (解决方法不唯一,如果行不通的话emmmm~~, 百度会啥你会啥~~) 坑.0X01 解决: 退出虚拟机,以管理员权限运行 坑.0X02 解决: ...

  3. F110使用的函数

    BAPI_ACC_DOCUMENT_POST BAPI_GL*POST 1.F-59 [没有找到函数]BAPI_ACC_DOCUMENT_POST 必须创建有借贷2 line 的凭证,需求要参考原始的 ...

  4. Java设计模式之《单例模式》及应用场景(转发:http://www.cnblogs.com/V1haoge/p/6510196.html)

    所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例. 单例有其独有的使用场景,一般是对于那些业务逻辑上限定不能多例只能单例的情况,例如:类似于计数器之 ...

  5. PyQt4 UI设计和调用 使用eric6

    使用工具eric6 安装包地址: http://eric-ide.python-projects.org/eric-download.html 1.需要安装python和pyqt为前提,然后安装eri ...

  6. 神奇的Timer

    最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下 注:这里的Timer类特指System.Threading ...

  7. Java多线程(Java总结篇)

    Java总结篇:Java多线程 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上 ...

  8. myql命令

    ALTER TABLE 表名 DROP COLUMN 列名#删除某一列

  9. ABP框架数据迁移报错

    问题描述:将项目从TFS载下来  然后敲update-database 进行数据迁移 提示:Update-Database : 无法将“Update-Database”项识别为 cmdlet.函数.脚 ...

  10. 常用的机器学习&数据挖掘知识点

    Basis(基础):MSE(Mean Square Error 均方误差),LMS(LeastMean Square 最小均方),LSM(Least Square Methods 最小二乘法),MLE ...