Digit
2024-09-06 02:00:46
Digit |
||
Accepted : 85 | Submit : 308 | |
Time Limit : 1000 MS | Memory Limit : 65536 KB |
题目描述
我们把十进制整数依次写成一个字符串,123456789101112…请问第n位数码是多少?
输入
第一行是一个整数T(T≤10000),表示样例的个数。 每行输入一个整数n(1≤n≤788888899)。
输出
每行输出一个样例的结果。
样例输入
2
1
788888899
样例输出
1
1 理解不了什么意思,先存着= =|| 理解之后回来看看^_^ #include <cstdio>
#include <cstring>
#include <math.h>
#include <iostream>
#include <algorithm> using namespace std; __int64 num[15]={0,9,99,999,9999,99999,999999,9999999,99999999,999999999,9999999999}; // 几位数,临界值
__int64 sum[15]; //几位数之前有多少数 int main ()
{
int i, t;
int n, m, Sum;
sum[0] = 0;
for (i=1; i<11; i++)
sum[i] = sum[i-1] + (num[i]-num[i-1])*i; // 这个数是一个i位数,之前有多少数。2位数之前有9位数,3位数开始之前有189个位
scanf ("%d", &t);
while (t --)
{
scanf ("%d", &n);
i = 1;
while (n > sum[i])
i ++; // n 这个数是在一个i位数中间的一个数 n -= sum[i-1]; //n变成了 这个i位数开始之后的n位数
n = n % i; // n是这个i位数中的第n位
Sum = num[i-1] + n / i; // num【i-1】是这个i位数开始之前的数,n/i是指第几个i位数,n是在Sum中的某一位
m = (num[i] - num[i-1])/9; //几位数,m后就有几个零
int s; //存结果
if (n == 0)
s = Sum % 10; // n等于0表示是这个数的最后一位
else
{
Sum ++; // n大于0表示已经超过i位了,所以要加一,就是第n位在Sum+1这个数里边
while (n --)
{
s = (Sum / m) % 10; // 求第n位是多少
m /= 10;
}
}
printf ("%d\n", s);
}
return 0;
} Do you understand?^_^||
最新文章
- 漫谈C语言结构体struct、公用体union空间占用
- UVA1103
- RobotFrameWork接口报文测试-----(三)demo的加强版(数据驱动测试)
- PHP和AJAX笔记汇总
- Java-HTTP连接时如何使用代理(二)—— Proxy类方式
- notepad++采用正则表达式删除空行
- thinkphp对文件的上传,删除,下载操作
- 1.2 Coin 项目
- Mqtt协议IOS移植完1
- Swing-GridBagLayout用法-入门
- Python中的冒泡排序
- 对于java中的";\";和";/";&#160;区别
- day38数据库MySQL基础
- Java接口简单理解
- 基于汇编的 C/C++ 协程 - 切换上下文
- JAR包中的MANIFEST.MF文件详解以及编写规范
- jQuery获取属性值的方法
- 虚拟化 - kvm安装
- Cppcheck代码分析上
- sqlplus客户端 navicat 使用sqlplus OCI
热门文章
- tomcat中的server.xml文件配置了URIEncoding=";UTF-8";需要注意的问题
- 【BASIS系列】SAP BASIS模块-后台配置的传输
- 洛谷T89643 escape
- 校内模拟赛 : Rima —— 字典树+树形DP
- AdaGrad Algorithm and RMSProp
- C++学习笔记(三)--数组、字符串
- java实现mysql数据库从一张表插入数据到另一张表
- C#中out和ref的区别
- ssh-keygen - 认证密钥的产生, 管理和转换
- XML及XML的解析