每天学习一算法系列(20)(输入一个表示整数的字符串,把该字符串转换成整数并输出)

题目:

输入一个表示整数的字符串,把该字符串转换成整数并输出。
例如输入字符串"345",则输出整数345。

 

思路一:

1.每扫描到一个字符,我们把在之前计算得到的值乘以10再加上当前字符表示的数字值,这个思路用循环不难实现。

2.由于整数字符串中可能不仅仅含有数字,还有可能以'+'或者'-'开头,表示整数的正负,如果第一个字符是'+'号,则不需要做任何操作;如果第一个字符是'-'号,则表明这个整数是个负数,在最后的时候我们要把得到的数值变成负数。

3.输入的字符串中可能含有不是数字的字符,每当碰到这些非法的字符,我们就没有必要再继续转换。

4.还要考虑的问题是溢出问题,由于输入的数字是以字符串的形式输入,因此有可能输入一个很大的数字转换之后会超过能够表示的最大的整数范围从而导致溢出。

总之结果算法的值应当尽量要和C运行时库中的atoi()函数计算的结果要一样.

 

代码如下:

#include "stdafx.h"
#include <iostream>
#include <limits>


/*-------------------------------
把整数字符串转换为整数
Copyright by yuucyf.   2011.07.22
---------------------------------*/
int ConvertStr2Interger(const TCHAR *ptszStr)
{
	if (NULL == ptszStr) return 0;

	long long llValue = 0;
	int i32CharVal = 0;
	bool bMinus = false;

	int i32Len = _tcslen(ptszStr);
	for (int i32I = 0; i32I < i32Len; i32I++)
	{
		if (0 == i32I && ptszStr[i32I] == _T('+'))
		{
			bMinus = false;
		}
		else if (0 == i32I && ptszStr[i32I] == _T('-'))
		{
			bMinus = true;
		}
		else if (ptszStr[i32I] >= _T('0') && ptszStr[i32I] <= _T('9'))
		{
			i32CharVal = ptszStr[i32I] - _T('0');
			llValue = llValue * 10 + i32CharVal;
			
			if(llValue > std::numeric_limits<int>::max()) // overflow
			{
				llValue = 0;
				break;
			}
		}
		else
			break;

	}

	if (bMinus)
		llValue = -llValue;

	return static_cast<int>(llValue);
}


int _tmain(int argc, _TCHAR* argv[])
{
	_tprintf(_T("The result is %d.\n"), ConvertStr2Interger(_T("-23s456")));
	return 0;
}


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Python 语言实现这个功能,代码如下: ```python import random n = int(input("请输入一个整数:")) nums = [str(random.randint(, 999)).zfill(3) for _ in range(10)] result = ''.join(nums)[:n] print(result) ``` 解释一下代码: 1. 首先通过 `input` 函数获取用户输入的正整数 `n`; 2. 然后使用列表推导式生成 10 个随机的 3 位非负整数,并将它们转换成字符串类型; 3. 使用 `join` 方法将这些字符串连接起来,得到一个长度为 30 的字符串; 4. 最后取这个字符串的前 `n` 个字符作为结果输出。 例如,如果用户输入的是 15,那么程序可能输出的结果是: ``` 098876543210123 ``` 其中,前 15 个字符是 `09887654321012`。 ### 回答2: 对于这个问题,我们可以首先生成 10 个不超过 3 位的随机非负整数,并将它们保存在一个列表中。接着,我们需要将这些数字首尾相连,可以通过将它们转换成字符串,再将字符串相加的方式来实现。最后,输出结果即可。 具体实现方法如下: ```python import random def concatenate(n): # 生成10个随机数字 nums = [random.randint(0, 999) for _ in range(10)] # 将数字转换为字符串并相加 result = ''.join(str(num) for num in nums) # 取result的前n位作为最终结果 return result[:n] # 测试 print(concatenate(5)) # 输出结果类似于: 6837213165 ``` 上述代码中,我们使用了 random 模块来生成随机数字。通过列表推导式和 range 函数,我们可以一次性生成 10 个随机数,且这些数字的范围在 0 到 999 之间。接着,我们使用了 ''.join() 方法将数字转换为字符串并相加,得到了一个长度为 10 的字符串,即将 10 个数字首尾相连的结果。最后,我们通过 Python 切片操作,取该字符串的前 n 位作为最终结果。 需要注意的是,如果 n 大于 10,则结果将包含所有 10 个数字;如果 n 小于等于 0,则结果为空字符串。 ### 回答3: 这道题目可以用Python语言来实现,具体步骤如下: 1. 输入一个整数n,作为随机数种子,确保每次运行程序时随机数序列相同。 ``` import random n = int(input("请输入一个整数n:")) random.seed(n) ``` 2. 生成10个不超过3位的非负整数,存储在列表中。 ``` nums = [] for i in range(10): num = random.randint(0, 999) nums.append(num) ``` 3. 将列表中的数字首尾相连,并输出结果。 ``` result = "" for num in nums: result += str(num) print("生成的字符串为:", result) ``` 完整代码如下: ``` import random n = int(input("请输入一个整数n:")) random.seed(n) nums = [] for i in range(10): num = random.randint(0, 999) nums.append(num) result = "" for num in nums: result += str(num) print("生成的字符串为:", result) ``` 这个程序会输出一个由10个随机数首尾相连组成的字符串字符串的长度在10到30之间(取决于随机数的大小)。例如,输入正整数n为10,可能的输出结果为: ``` 生成的字符串为:381920660201944782581 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值