代码题(59)— 字符串相加、字符串相乘、打印最大n位数
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位数的更多相关文章
- [LeetCode]415. 字符串相加、43. 字符串相乘
题目 415. 字符串相加 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 题解 维护一个temp表示当前两数相加+上一个进位的和. 每次更新结果的一位. 注意终止条件. 最后将 ...
- 【转】String字符串相加的问题
String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...
- String 字符串相加比较
String 字符串相加 对比 public static void main(String[] args) { String a = "helloword"; final Str ...
- leecode刷题(16)-- 字符串转换整数
leecode刷题(16)-- 字符串转换整数 字符串转换整数 描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格 ...
- leecode刷题(13) -- 字符串中的第一个唯一字符
leecode刷题(13) -- 字符串中的第一个唯一字符 字符串中的第一个唯一字符 描述: 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = & ...
- [LeetCode] 大数问题,相加和相乘,题 Multiply Strings
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- noi题库 1.7 字符串
前九题 01:统计数字字符个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字 ...
- String字符串相加的原理
因为String是非常常用的类, jvm对其进行了优化, jdk7之前jvm维护了很多的字符串常量在方法去的常量池中, jdk后常量池迁移到了堆中 方法区是一个运行时JVM管理的内存区域,是一个线程共 ...
- T-SQL字符串相加之后被截断的那点事
本文出处:http://www.cnblogs.com/wy123/p/6217772.html 字符串自身相加, 虽然赋值给了varchar(max)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...
随机推荐
- android studio 和gradle版本问题解决
打开android studio 开始导入一个 covrdova项目 结果弹出一个这样的对话框意思是 "尚未配置此项目的 gradle" "是否希望项目使用gradle ...
- Ubuntu系统vi编辑器上下左右键变ABCD的解决方法(转)
首先卸载旧版本的vi编辑器: $sudo apt-get remove vim-common 然后安装新版vi即可: $sudo apt-get install vim Ubuntu自带有几种版本的v ...
- github 上 python 的优秀库推荐列表
awesome-python: https://github.com/vinta/awesome-python
- vim常用快捷键记录
yy复制一行 2yy复制2行 同理 3yy复制3行 p粘贴复制 dd删除一行 ctrl+f 翻页 ctrl+b 上翻 shift+a 跳到行尾进入insert模式 shift+i 跳到行首进入inse ...
- 当退出python时,是否释放全部内存
答案是no,循环引用其他对象或引用自全局命名空间的对象的模块,在python退出时并非完全释放 另外,也不会释放c库保留的内存部分
- 通用TryParse
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Refle ...
- docker devise相关错误
rake aborted!Devise.secret_key was not set. Please add the following to your Devise initializer: con ...
- [POI2009]Slw
题目 神题!!只有\(POI\)出得出来的神题!! 只能说好像懂了,不想听蒟蒻废话就右转\(dalao\)的博客 目前网上除官方外仅三篇题解,由于推论无法直观得出且有点复杂,难免不好理解,手玩数据最重 ...
- SQL单行函数和多行函数
单行函数和多行函数示意图: 单行函数分为五种类型:字符函数.数值函数.日期函数.转换函数.通用函数 单行函数: --大小写控制函数 select lower('Hello World') 转小写, u ...
- shell的符号总结
1.命令替换符:先执行符号内的命令 反引号``:旧格式 $():新格式 2.字符串界定符: 单引号:保持引号内 的字符的字面值. 双引号:有些情况特殊. $echo '`date`' #不会执行`da ...