Digits Sequence (Easy Edition)(int->string)

本文探讨了一种算法,旨在解决一个数学挑战:确定由连续正整数组成的无限序列中的第K位数字。通过使用C++11的to_string函数将整数转换为字符串,再连接这些字符串形成目标序列,最后提取指定位置的字符作为答案。

 

Let's write all the positive integer numbers one after another from 11 without any delimiters (i.e. as a single string). It will be the infinite sequence starting with 123456789101112131415161718192021222324252627282930313233343536...

Your task is to print the kk-th digit of this sequence.

Input

The first and only line contains integer kk (1≤k≤100001≤k≤10000) — the position to process (11-based index).

Output

Print the kk-th digit of the resulting infinite sequence.

Examples

input

7

output

7

input

21

output

5

 

1.to_string();

 

c++11标准增加了全局函数std::to_string:

string to_string (int val);

string to_string (long val);

string to_string (long long val);

string to_string (unsigned val);

string to_string (unsigned long val);

string to_string (unsigned long long val);

string to_string (float val);

string to_string (double val);

string to_string (long double val);

代码示例:(使用编译器vs2013)

#include<iostream>
#include <string>   //std::string,std::string
#include<stdlib.h>
using namespace std;
int main()
{
	int num;
	string  str;
	cin >> num;
	str = to_string(num);
	cout << str;
	system("pause");
	return 0;
}

那么对于本题而言,for循环遍历,把出现的每一个数字转化为sting类型,然后再加入到sting变量中,就OK了。

 

#include<algorithm>
#include<iostream>
#include<string.h>
#include<cstdio>
#include<string>
#include<stdlib.h>
#define  P pair<long long,long long>
#define ll long long
using namespace std;
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//加速输入输出流
    string num="";
    int numm;
    cin>>numm;
    for(int i=1;i<=numm;++i)
    {
        num+=to_string(i);
    }
    cout<<num[numm-1]<<endl;
    return 0;
}

 

由于未提供比较两个`CBigInt`类型对象大小的具体代码,结合已有引用中比较字符串大小的思路来阐述通用的分析方法。 ### 功能 在 C 语言里,比较两个`CBigInt`类型对象大小的代码,其主要功能是判定这两个`CBigInt`对象谁大谁小或者是否相等。如同比较字符串大小的`strcmp`函数,会依据比较结果返回不同的值,像第一个对象大于第二个对象返回 1,相等返回 0,小于返回 -1 这类情况。 ### 原理 #### 一般原理 比较两个`CBigInt`对象大小,通常要逐位比较这两个对象的每一位数字。就像比较字符串时要逐个字符比较一样,从高位开始比较,若某一位上一个对象的数字大于另一个对象的数字,那么这个对象就大;若对应位数字都相同,就继续比较下一位;若所有位数字都相同,那么这两个对象相等。 #### 类比字符串比较 以引用中比较字符串大小的`strcmp`函数和`Mystrcmp`自定义函数为例,`strcmp`函数接收两个`char *`类型的参数,通过比较这两个字符串对应位置的字符来确定大小。`Mystrcmp`函数模拟了`strcmp`的功能,借助`while`循环遍历两个字符串,比较对应位置的字符,若字符相同就继续比较下一个字符,若不同则依据字符大小关系返回 1 或者 -1,若循环结束都没出现不同字符,就说明两个字符串相等,返回 0。 ### 示例代码 假设`CBigInt`是用数组来存储大整数,以下是一个简单的比较两个`CBigInt`对象大小的示例代码: ```c #include <stdio.h> // 假设 CBigInt 是用数组存储大整数,len 表示数组长度 typedef struct { int digits[100]; int len; } CBigInt; // 比较两个 CBigInt 对象大小的函数 int compareCBigInt(CBigInt num1, CBigInt num2) { if (num1.len > num2.len) { return 1; } else if (num1.len < num2.len) { return -1; } else { for (int i = num1.len - 1; i >= 0; i--) { if (num1.digits[i] > num2.digits[i]) { return 1; } else if (num1.digits[i] < num2.digits[i]) { return -1; } } return 0; } } int main() { CBigInt num1 = {{1, 2, 3}, 3}; CBigInt num2 = {{1, 2, 3}, 3}; int result = compareCBigInt(num1, num2); printf("比较结果: %d\n", result); return 0; } ``` ### 代码解释 1. **结构体定义**:`CBigInt`结构体包含一个整数数组`digits`用于存储大整数的每一位数字,以及一个整数`len`表示数组的长度。 2. **比较函数**:`compareCBigInt`函数先比较两个`CBigInt`对象的长度,若长度不同,长度大的对象大;若长度相同,则从高位开始逐位比较每一位数字,若某一位数字不同,数字大的对象大;若所有位数字都相同,则两个对象相等。 3. **主函数**:创建两个`CBigInt`对象`num1`和`num2`,调用`compareCBigInt`函数比较它们的大小,并输出比较结果。 ### 优化建议 - **减少不必要的比较**:在逐位比较时,若已经能确定大小关系,可提前结束比较。 - **处理符号**:若`CBigInt`对象可能为负数,要先比较符号,再比较绝对值大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值