精华内容
下载资源
问答
  • JavaScript如何判断一个数是几位数

    千次阅读 2019-08-22 11:42:24
    可以想象当这个数某位数除以10为小数的时候,也就是到了该的最大(例:如123,123除以10取整为12,12除以10取整为1,1除以10为小数,即不符合循环条件),根据此写循环条件: var i = parseInt(prompt('请输入一个...

    实现目标的方法有很多,现在介绍一种使用while循环实现的方法。
        可以想象当这个数某位数除以10为小数的时候,也就是到了该数的最大位(例:如123,123除以10取整为12,12除以10取整为1,1除以10为小数,即不符合循环条件),根据此写循环条件:

    	var i = parseInt(prompt('请输入一个整数'));
    	var l=0;
    			while(i >= 1){
    			i=i/10;
    			l++;
    			}
    			console.log(l);
    
    展开全文
  • 数字序列中一位的数字 1.题目描述 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是...1.确定第n位是几位数: 每个位数对应有9*pow(10,digits-...

    数字序列中某一位的数字

    1.题目描述

    数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。
    请写一个函数,求任意第n位对应的数字。
    示例 1:
    在这里插入图片描述
    示例 2:
    在这里插入图片描述
    限制:
    0 <= n < 2^31

    2.思路

    1.确定第n位是几位数:
    每个位数对应有9*pow(10,digits-1)*digits个数。
    2.确定是该位数的第几位:
    pow(10,digits-1) + n/digits;
    3.位数取余得到是数字上的第几位。

    3.代码

    class Solution {
    public:
        int findNthDigit(int n) {
            if(n < 10){
                return n;
            }
            int digits = 1;//代表数字的位数
            while(n > 9*pow(10,digits-1)*digits){
                n -= 9*pow(10,digits-1)*digits;
                digits++;
            }
            //得到n是代表的数字对应的第几个数
            int res = pow(10,digits-1) + n/digits;
            int mod = n % digits;
            if(mod == 0){
                return (res- 1) % 10;
            }
            else{
                return res/(int)pow(10,digits-mod)%10;
            }
        }
    };
    
    展开全文
  • 即枚举每一个数字,求出该数字是几位数,并把该数字的位数和前面所有数字的位数累加,如果位数之和仍然小于或者等于n,则继续枚举下一个数字。当累加的数位大于n时,第n位数字一定出现在这个数字里,从中找出对应的...

    1.暴力法

    即枚举每一个数字,求出该数字是几位数,并把该数字的位数和前面所有数字的位数累加,如果位数之和仍然小于或者等于n,则继续枚举下一个数字。当累加的数位大于n时,第n位数字一定出现在这个数字里,从中找出对应的值

    缺点:效率比较低

    2.数学法

    0-9   共10个数字,每个数字提供一位

    10-99  共90个数字,每个数字提供2位

    100-999 共900个数字,每个数字提供3位

    1000-9999 共9000个数字,每个数字提供4位

    ......

    利用如下规律,判断n在哪个区间

    可以发现如果把最初的0取掉,每一轮增加的位数都是9*pow(10,k-1)*k,其中k表示当前是第几轮(或者说该轮中的数字的位数,如第一轮1位数,第二轮是2位数)

    每判断一轮n的值就变为N-9*pow(10,k-1)*k,直到N小于0,

    对于每一轮,都记录n减小之前的值,设为num,

    对于最后的num,

    设a=(num-1)/k

    b=(num-1)%k

    此处的1表示最初未计算的0

    a=a+pow(10,k-1)

    找到a的第b位即可

    以1001为例:

    初始1001>0                   n=992>0                   n=812>0

    num=1001,                   num=992                    num=812

    n=1001-9=992           n=991-180=812            n=812-2700<0   循环结束

    a=(812-1)/3=270    三位数的起始值是100,即pow(10,3-1);

    b=(812-1)%3=1

    a=270+100=370

    a的第1位是7,即为最终的结果

    代码如下:

    class Solution {
    public:
        int findNthDigit(int n) {
           int k=0,num=0;
           if(n<10)
             return n;
            while(n>0)
            {
             num=n;
             n=n-9*pow(10,k)*(k+1);
             k++;
            }
    
            int a=(num-1)/k;
            int b=(num-1)%k;
            a=a+pow(10,k-1);
            string s=to_string(a);
            return int(s[b]-'0');
    
    
        }
    };

     

    展开全文
  • 题目: 数字以0123456789101112131415...的格式序列化到一个字符串序列中。这个字符串,第5位5(从0...取余位数后,得到的显示第几位(从左往右,从0开始计数) 参考代码: #include <iostream> #incl...

    题目:

           数字以0123456789101112131415...的格式序列化到一个字符串序列中。这个字符串,第5位是5(从0开始计数),第13位是1,第19位是4。请写出一个函数,求任意第n位数。

     

    解题思路:

    先确定n的范围,然后减去前面的范围,除上位数,(同时取余位数),求出该范围内的数,在加上之前的范围真实数,就是真实要显示的那个数字。取余位数后,得到的是显示第几位(从左往右,从0开始计数)

     

    参考代码:

    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <list>
    #include <unordered_map>
    #include <cstring>
    #include <map>
    
    using namespace std;
    
    class Solution {
        public:
            long long f[10] = {0,10,190,2890,38890,488890,5888890,68888890,788888890,8888888890};
            int find_Solution(int index)
            {
                //0~9要单独处理,不符合下面的公式
               if (index <= 0)
                   return 0;
    
               if (index <= 9)
                   return index;
    
               int w_data = 0;
               //先算位数,判断在哪个范围
               for (int i = 1; i < 10; ++i) {
                    if (index <= f[i])
                    {
                        w_data = i;
                        break;
                    }
                }
    
               index -= f[w_data-1];
               int temp1 = index/w_data; //在某个范围内真实的数
               int temp2 = index%w_data; //要显示的位数
               int real_data = pow(10,w_data-1) + temp1;//求出真实的数
    
                return (find_w(real_data,(w_data-temp2)));//实现位数
            }
            //获取从右往左第n位,从1开始
            int find_w(int origin, int n)
            {
                int res = origin;
                if (n != 1)
                {
                    while (n > 1)
                    {
                        --n;
                        origin /= 10;
                        res = origin%10;
                    }
                } else
                    res = origin%10;
    
                return res;
            }
        };
    
    int main()
    {
        Solution solution;
    
        cout<<solution.find_Solution(1001)<<endl;
    
        return 0;
    }

     

    展开全文
  • 44. 数字序列中的一位数字 ...题目描述 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)5,... // 确定所在位置属于几位数 int dight = 1; // 位数 long star
  •   如果小于10,直接返回n就好了,这里面有一个规律10-99有9102个数字,100-999有91010*3个数字,以此类推,我们通过这个规律可以计算出是几位数的数字中找,用n减去之前计算过的组的总个,可以得到在一组中,...
  • 输入第n位首先找出第n位对应的数字位数,然后根据位数找到此位所对数值num,然后找到n所对num中的第几位数字. 1. 第一步确定所求位的所在数字的位数 digit为1位的共有10个(0-9),2位的共有90个(10-99),三位的共有...
  • 数字按照...每枚举一个数字的时候,求出该数字是几位数,并把数字的位数和前面的所有数字的位数相加。当累加的数位大于n时,那么第n位数字一定在这个数字里。 以第15位数字2为例(2...
  • 题目描述: 数字以0123456789101112131415…的格式序列化到一个字符序列中。...判断序列第n位数什么,首先要知道第n位属于几位数的第几位,这个多位数又什么? 我们知道,一位数0-9共10个,两位数10-99共9...
  • 中哪个位置中,digit表示几位数 由该范围的起始位置和位数确定哪个数字 确定在这个数字的第几位 代码 public int findNthDigit(int n) { if(n==0) return 0; int digit = 1; long start = 1; //注意类型 ...
  • [44]数字序列中一位的数字 文章目录[44]数字序列中一位的数字题目思路代码 题目 数字以0123456789101112131415…的格式序列化到一...确定是几位数 n-10-90*2… 确定第几位 / 具体数的第几个 % 代码 class Solutio
  • 解题思路:主要分为三步(1)确定当前位所在的数字是几位数 (2)确定前位所在的数字(3)确定当前位指向的是所在数字的第几位 代码如下: class Solution: def findNthDigit(self, n: int) -> int: if n <=...
  • 原题链接 ... n: 第几位数,从第0位开始,第0位0 digit: 数字有几位 start: 每digit位数的起始数字;例:2位数的起始数字10 count:每digit位数系列化后拥有的数字数量; count = 9 * start * di
  • 给你一个n,让你求第n的数字是几?(0~9) public int findNthDigit(int n) 思路:找规律题。 1.先根据n来找到该数字的位数 (1位数,1到9,有9。2位数,10到99,有180=9乘10乘2。3位数,100到999,有2700=9...
  • 注意:字符就是指类字型...使用MID函数公式,MID(字符串,开始位置,字符个)选取单元格内从开始位置(字符的序号)算起的字符个的字符段来进行数据输出。 使用 & 字符来进行字符段拼接; 使用 ±字符来进行字
  • 题目描述 // 44. 数字序列中一位的数字 ...先求n所在的数字属于几位数,2.后求n所在的数字num,3.最后求n在数字num的第几位 // 如n=11,我们将 // 1:先求n所在的数字属于2位数 // 2:后求n所在的数字为10, //
  • 思路: ...3.计算出偏移,10对应的10的第一位数字,11对应的10 的第二位数字,所以我们要算出他具体的第几位数字 4.返回。 举个例子1001。 序列的前10位0~9,这些都1位数字,1001 >...
  • #方法1:直观方法,每枚举一个数字的时候,求出该数字是几位数,并把该数字的位数和前面所有数字的位数累加, #如果位数之和《n,则继续枚举下一个数字,当累加的位数》=n,那第n位数字一定在这个数字里,我们再从该...
  • 宾馆使用4数字安排房间号,数字4和9不使用,从0001开始排,第0330号房间个房间? 举例: 1号房间号 0001 2号房间号 0002 3号房间号 0003 4号房间号 0005 5号房间号 0006 6号房间号 0007 7号房间号 ...
  • 这种数学题好难…… 参考: ...以第15位数字2为例(2隶属与...步骤1:首先确定该数字属于几位数的; 如果一位数,n<9;如果两位数,n<9+90*2=189; 说明两位数。 步骤2:确定该数字属于哪个数。10+(15-10)/2...
  • // 表示几位数 int digit = 1; // 几位数开始的数字 long start = 1; // 几位数一共有多少个 long count = 9; // 确定所在数字的多少位的 while (n > count) { n -= count; digit += 1; // 总结出来...
  • 题目 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从...当给定一个数n时,先判断它对应几位数。例如0~9对应个位数; 10~189对应两位数,190~2889对应3位数; 其中的关键数字[.
  • 题目描述 ...每次枚举一个数字的时候,求出数字是几位数,并把该数字的位数和前面所有的数字的位数累加 -当和大于该数,则第n位数一定在这里面 算法图解 参考代码: package offer; /** * 数字...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,117
精华内容 446
关键字:

某数是几位数