精华内容
下载资源
问答
  • 黑科技: n & (n-1) 例子: 剑指offer15题,二进制中1个数 class Solution { public: int hammingWeight(uint32_t n) { int count = 0; while(n){ n = n & (n-1);...最右边那个1

    黑科技一:

    n & (n-1)
    

    例子:
    剑指offer15题,二进制中1的个数

    class Solution {
    public:
        int hammingWeight(uint32_t n) {
            int count = 0;
            while(n){
                n = n & (n-1);
                ++count;
            }
            return count;
        }
    };
    

    黑科技二:

    把最右边那个1的左边都变为0;

    n = n & -n;
    

    例子:

    -n = ~n + 1
    看下面这个过程:

    12   01100
    ~12  10011
    		 1
    -12  10100
     &   00100
    

    常用二进制操作

    在这里插入图片描述

    展开全文
  • 百度百科:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字。 就是一个数从左边第一个不为0的数字数起到末尾数字为止,所有的数字(包括0,科学计数法不计10的N次方),称为有效数字...

    百度百科:从一个数的左边第一个非0数字起,到末位数字止,所有的数字都是这个数的有效数字。
    就是一个数从左边第一个不为0的数字数起到末尾数字为止,所有的数字(包括0,科学计数法不计10的N次方),称为有效数字。简单的说,把一个数字前面的0都去掉,从第一个正整数到精确的数位止所有的都是有效数字了。
    如:0.0109,前面两个0不是有效数字,后面的109均为有效数字(注意,中间的0也算)。

    BigDecimal类型的小数可以使用MathContext指定有效数字。

    /**
     * 写法来自StackOverflow的Kru 
     * https://stackoverflow.com/questions/7572309/any-neat-way-to-limit-significant-figures-with-bigdecimal
     */
    System.out.println(new BigDecimal(0.022223).round(new MathContext(3, RoundingMode.HALF_UP)));
    // (四舍五入)输出:0.0222
    
    System.out.println(new BigDecimal(144.022223).round(new MathContext(5, RoundingMode.HALF_UP)));
    // (四舍五入)输出:144.02
    
    展开全文
  • 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出...

    题目描述

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

    这是一道非常经典的题目,旋转后的数组如下图所示

    去掉最后的那一段,就可以应用二分搜索来解决问题

    class Solution {
    public:
        int minNumberInRotateArray(vector<int> rotateArray) {
            if(rotateArray.size()==0) return 0;
            int right = rotateArray.size()-1;
            while(rotateArray[0]==rotateArray[right]){
                right--;
            }
            if(rotateArray[0]<rotateArray[right])
                return rotateArray[0];
            int left = 0;
            // 
            while(left<right){
                int mid = left + right >>1;
                if(rotateArray[mid]>rotateArray[0]) left=mid+1;
                else right = mid;
            }
            return rotateArray[left];
        }
    };

     

    展开全文
  • 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个升序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 数组可能包含...

    问题描述:
    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个升序的数组的一个旋转,输出旋转数组的最小元素。
    例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
    数组可能包含重复项。
    注意:数组内所含元素非负,若数组大小为0,请返回-1。
    样例

    • 输入:nums=[2,2,2,0,1]
    • 输出:0

    巧妙地使用了二分法,附上大佬的题解过程,乍一看,好像不好理解,仔细一看,发现很巧妙。首先是去掉最后一段不满足单调递增的数组部分,其余部分都是满足二分条件,最特殊的例子比如[2,0,1,2,2]除去最后那段重复的部分,[2,0,1]这部分就满足二分条件,nums[i]>=nums[0],以0为分界点,有半段不满足,这样使用二分将 r 所在位置找出来即可。特殊情况输入的例子本来就是递增数列,那么只需要将nums[0]输出即可。旋转数组之后最小值在后半段。需要看mid在数组的左半段还是右半段。

    class Solution {
    public:
        int findMin(vector<int>& nums) {
            int l=0,n=nums.size()-1;
            if(n<0) return -1;
            while(n>0&&nums[n]==nums[0]) n--;
            if(nums[n]>nums[0]) return nums[0];
            int r=n;
            while(l<r)
            {
                int mid=(r+l)/2;
                if(nums[mid]<nums[0]) r=mid; //mid在后半段,有可能是等于mid
                else l=mid+1;//说明mid在左半段
            }
            return nums[r];
        }
    };
    

    中间部分变换成下面的代码需要注意加上等号,因为这样一开始判断的是mid在左边段,左半段有可能是样例[3,3,1,2]所显示的那样,如果去掉等号返回的结果是3,而不是1。

    		while(l<r)
            {
                int mid=(l+r)>>1;
                if(rotateArray[0]<=rotateArray[mid]) l=mid+1;
                else r=mid;
            }
    

    类似的题目【搜索旋转排序数组 II】有重复值和无重复值需要注意。这个题目是寻找目标值,目标值所在的位置可以是前半段也可以是后半段,因此需要分两种情况讨论。
    在这里插入图片描述

    展开全文
  • 经常会遇到SQL数据集查出来数据都是保留2位小数(比如7.50,2.00这类),但是到birt chart图表中时就会把末尾的0去掉了(比如7.5,2),这是因为birt chart 图表在设置格式中,还提供了一个数值格式编辑界面,在...
  • 输入数n; 将n!末尾的0去掉。再取最后9位。 最后9位前面的0去掉;(9位当做一个数去掉无效的0) 输出得出数; n最大到10000000 比如输入38 输出 742912
  • 给定一个数x,如果在x前加任意多前导0(可以没有),可以变成一个回文数,则输出YES,否则NO。 数字末尾的0去掉然后在判断剩余数字是否是回文数即可。如101000,把末尾3个0去掉变成101,是回文数,输出YES。 #...
  • 大数n次方

    千次阅读 2012-04-07 00:39:40
    题分成三部分: 1、数字逆序存放,以方便乘法时从后一位乘起规则,记下小数点位置,在相乘时去掉小数点,在结果输出时再添加...主要是大数每一位放在一个数组里存放 #include #include #define max
  • hdu 2054 A == B ?

    万次阅读 2017-08-02 09:20:41
    主要是考虑小数中末尾的0,如1.0和1.00是相等数,所以输入数据类型最好定义成字符串,然后在比较两个数前先把末尾的0去掉。另外,题目上没给具体数值类型,所以要开一个很大字符数组。  1)前导0去掉...
  • 7、整数反转

    2020-07-06 17:11:46
    这道题有两个难点:大家都知道对一个整数对10取余会得到整数末尾的那个,然后我们需要这个数字放在第一位来构成一个整数。然后对10做除法,得到去掉末尾整数。 因此第一个难点就是,如何将得到字符放...
  • poj 1604

    2016-02-25 21:57:57
    解题思路:1*2*3*......*n,每次乘完一个数后,把末尾0去掉,然后模上一个数,这样算出来数肯定是最后一位不为0的数。。 注意这里模数不能太小,同时也不能太大,太小可能会影响乘积效果,譬如可能出现0的...
  • Editplus 3[1].0

    2011-04-02 10:45:21
    “\0”代表第一个“[0-9]”对应原型,“\1”代表第二个“[0-9]”对应原型,依此类推 “[”、“]”为单纯字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它...
  • ThrowingCards问题

    2011-06-08 17:07:00
    //给出一个有序的数列N:1到n,每次第一个去掉,然后把去掉第一个后N的第一个数移到N的末尾,统计去掉的数,直到剩下两个数时停止执行#include "stdio.h"int main(){ int a; int j1; int m[100]={0},n[100]={0}...
  • 末尾0的数逆序时要把末尾的0去掉。采用一个bool flag来判断。 int类型逆序后可能溢出,要用一个long long来接收逆序结果。 负数要乘以-1当正数处理,但是要注意-2147483648: 64位系统中,int最小值为-...
  • 1、去掉优惠券的末尾数:  parseFloat(12.00).toFixed(0); 2、截取字符串,有常用的三个方法,slice(0,12),substr(0,12),subsub(0,5) 3、 函数:split() 相当于php中的explode()功能:使用一个指定的分隔符把一...
  • 568 - Just the Facts

    2014-01-21 13:50:15
    解题思路:每次相乘把末尾的0去掉,但是为了防止末尾0需要用到前面的数,就需要保留几位。因为int型可以支持99999 * 10000 数据大小,所以可以保留后五位数。 #include int n; int main() { while(scanf...
  • zoj 3430 AC自动机

    2016-04-24 22:56:32
    输入字符根据下表,转化成value数字,在转化成6位二进制,载8个二进制一组划分,转化成0~255数字(ASCII字符十进制),然后就是AC自动机模版事了。一个=表示转化得到二进制末尾去掉2个0 Value
  • [bzoj3492]Binary Dodgeball

    2017-03-16 16:50:27
    这样话我们个数二进制都写出来,每次就是去掉末尾个0。 按照除lowbit部分分组,不同组之间互相独立。 每组游戏可以这样描述: 有一群石子堆,每次从一个石子堆拿走至少一颗石子,若存在两堆相同石子...
  • Reverse Integer--easy 给定一个32位有符号整数,实现数字反转。这道题用是字符串反转方法...一是整数末尾0,应将其转换成字符串之后把末尾的0去掉。二是当整数是负数时要反序后负号放到字符串前面。 ...
  • 题目描述 给你一个 32 位有符号整数 x ,返回将 x 中数字部分反转后结果。 如果反转后整数超过 32 位有符号整数范围 [−231, 231 − 1] ,... //先把末尾的0去掉 while(flag/10!=0 && flag%10==0){
  • [热身题][hdoj_2054]A == B ?

    千次阅读 2012-08-05 23:53:41
    开始时候很弱智用了一个if(a == b)...用了指针,先数字末尾的0去掉,并换成 \0 结束标志 然后指针重新指向字符串开头,如果是0的话后移 比较两个指针,如果相等,输入YES,反之输出NO // hdoj_2054 A
  • //strlen() 这个函数是返回一个字符串中字符个数,不包括结束符 '\0'; char * currenP = (char *)malloc(sizeof(char) * currentlen); strcpy(currenP, buf);//复制BUF ,buf包含整个数据库?? pArray...
  • 杭电2054 A == B ?

    千次阅读 2012-06-04 11:07:01
    主要是考虑小数中末尾的0,如9.0和9.00是相等数,所以输入数据类型最好定义成字符串,然后在比较两个数前先把末尾的0去掉。另外,在定义字符串是如果你用一个a[100]来输入交上去后也会报错,当你开到a[50000]时...
  • “\0”代表第一个“[0-9]”对应原型,“\1”代表第二个“[0-9]”对应原型,依此类推 “[”、“]”为单纯字符,表示添加“[”或“]”,如果输入“其它\0\1\2其它”,则替换结果为: asdadas其它123其它...
  • 不同类型所占字节

    2020-06-24 19:27:25
    在c语言中每一个中文所占大小为3字节,每一个数字所占大小为1字节,英文...char* 转string 时, 会自动把末尾的 “\0去掉。 strlen()是取字符串除去结尾符 “\0长度。 文本文件中换行是以“\r\n”结尾。 ...
  • 2016 百度之星 资格赛

    2016-05-14 17:09:08
    字典树,记录结点的单词 以及 当前结点是否是单词的末尾,delete时需要先找出前缀对应的串,统计末尾结点总数,然后用前缀减掉就好了。开始DFS跑的时候没有delete的结点去掉(SB啊),但强行951ms过了,后来做...
  • 思路:先把末尾的偶数全部去掉,然后长度不为0的话看剩下数字和是否为偶数,是话直接输出,否则找一个奇数删去,注意不要有前导0 #include<bits/stdc++.h> using namespace std; int t,n; char s[3005]; ...
  • 题:输入两整型a和b,分别将其逆置后输出其和,末尾0的把0去掉。 例:输入 8 和 210,输出20;   #include using namespace std; int main() { int a,b; //保存输入 int ca=0,cb=0; cin>>

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

把一个数的末尾去掉一个0