代码题(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)类型的变量,在某些特殊情况下仍然会被“截断”,这 ...
随机推荐
- 解决IE,z-index失效
在影响显示顺序的模块加上: style="position:relative;z-index:-1;" 解决IE,z-index失效
- Xenserver中SR、VBD和VDI之间的关系
首先需要理解xenserver下的SR,VDI,VBD这三个概念.如下图 存储库 (SR) 虚拟磁盘映像 (VDI) 物理块设备 (PBD) 虚拟块设备 (VBD) 看上图所示,他们之间的关系. SR ...
- LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]
最近做一个负载均衡项目的性能测试,使用LR录制脚本协议为https协议,回放脚本时出现报错: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX& ...
- http请求设置setConnectTimeout()方法超时无响应
相信非常多小伙伴在写 HttpURLConnection中都设置了setConnectTimeout()方法.目的就是在网络不好的情况下超时返回 然而我们设置的setConnectTimeout()并 ...
- 0107-将Monolith重构为微服务
重构到微服务的概述 将单一应用程序转换为微服务的过程是应用程序现代化的一种形式.这是开发人员几十年来一直在做的事情.因此,在将应用程序重构为微服务时,我们可以重用一些想法. 一个不使用的策略是重写“B ...
- OpenAI gym的建模思想
一.强化学习问题需要描述那些内容 强化学习中最主要的两类对象是“个体”和“环境”,其次还有一些像“即时奖励”.“收获”.“状态”.“行为”.“价值”.“策略”.“学习”.“控制”等概念.这些概念把个体 ...
- C语言转义字符的使用方法
cppreference.com -> 转义字符 常量转义字符 以下的转义字符使普通字符表示不同的意义. 转义字符 描述 \' 单引号 \" 双引号 \\ 反斜杠 \0 空字符 \a ...
- [笔记]一道C语言面试题:IPv4字符串转为UInt整数
题目:输入一个IPv4字符串,如“1.2.3.4”,输出对应的无符号整数,如本例输出为 0x01020304. 来源:某500强企业面试题目 思路:从尾部扫描到头部,一旦发现无法转换,立即返回,减少无 ...
- VM and Docker Container
https://www.zhihu.com/question/48174633 在开始讨论前,先抛出一些问题,可先别急着查看答案,讨论的过程可以让答案更有趣,问题如下: Docker 容器有自己的ke ...
- C51数据类型