精华内容
下载资源
问答
  • 得到一个数字中每一位的数字

    万次阅读 2014-05-16 10:59:01
    学习编程也有一段时间了,随着学习的不断深入...如:判断数字123是否是水仙花数需要得到每一位的数字 通常计算每一位的数字的算法是: 位:a = 123 % 10 = 3 十位:b = 123 %100 / 10 = 2 百位::c = 123 % 100

    学习编程也有一段时间了,随着学习的不断深入,我越来越体会到了算法的重要性,最近遇到了一些非常有意思的算法,比如打印水仙花数、将数字逆置,在这两个算法中会用到一个数字钟每一位的值

    如:判断数字123是否是水仙花数需要得到每一位的数字

    通常计算每一位的数字的算法是:

    个位:a = 123 % 10 = 3

    十位:b  = 123 %100 / 10 = 2

    百位::c = 123 % 100 = 2


    随着位数的越来越大,这种方法满足不了程序的需求

    比如计算:123445677777777777777777777每一位的数字使用上面的方法肯定是不行的


    最近我学了一种比较好的方法:

    为了便于理解这种方法,我用前面的例子使用这种方法计算123中每一位的值


    需要计算的数字:

    1 2 3

    首先定义变量  j = 123

    m = 0


    第一步:求出个位上的数字

    m = j % 10 = 123 % 10 = 3

    j = j / 10 =  123 / 10 = 12;//将三位数变成两位数


    第二步:求出十位上的数字

    m = j % 10 = 12 % 10 = 2

    j = j / 10 = 12 / 10 = 1//将两位数变成一位数


    第三步:求出百位上的数字

    m = j % 10 = 1 % 10 = 1

    j = j / 10 = 1 / 10 = 0//将数字清零


    最后得到个位上的数字是3,十位上的数字是2, 百位上的数字是1


    程序代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    void main()
    {
    	int num;
    	int i = 0;
    
    	printf("请输入一个数字:");
    	scanf("%d", &num);
    
    	while(num>0)
    	{
    		i = num % 10;//计算每一位上的数字
    
    		printf("%d\n", i);//打印每一位数字
    
    		num = num / 10;//实现位与位之间的遍历
    	}
    
    	system("pause");
    }
    

    测试程序:
    当输入123时


    当输入一个比多位数时:比如12341221

    
    展开全文
  • JAVA入门基础知识积累获取一串数字中每一位数的小技巧 获取一串数字中每一位数的小技巧 假定有一个五位数 57648 ,我们要获取他的万位、千位、百位、十位、个位的一个数值,有一个比较方便的做法,不用去做字串...

    获取一串数字中每一位数的小技巧

    假定有一个五位数 57648 ,我们要获取他的万位、千位、百位、十位、个位的每一个数值,有一个比较方便的做法,不用去做字串截取。

    // 数值 57648
    int num= 57648;
    
    // 万位 除以一万
    int wanWei = num / 10000;// 利用自动类型转换获取得到 5 以下同理
    
    // 千位 以一万取余,然后除以一千
    int qianWei = num % 10000 / 1000;// 得到 7
    
    // 百位 以一千取余,然后除以一百
    int baiWei = num % 1000 / 100;// 得到 6
    
    // 十位 以一百取余,然后除以十
    int shiWei = num % 100 / 10;// 得到 4
    
    // 个位 以十取余
    int geWei = num % 10;// 得到 8
    
    

    在这里插入图片描述
    谢谢大家!

    展开全文
  • 今天我来讲解一下C语言有关于于处理数字的一些问题,有“丢弃 “和“ 得到“对应的数字的方法,常常可以用来解决一些顺序输出每个数字,逆序输出每个数字,判断数字位数等问题。 第一个问题:判断数字位数: ...

    今天我来讲解一下C语言中有关于于处理数字的一些问题,有“丢弃 “和“ 得到“对应位上的数字的方法,常常可以用来解决一些顺序输出每个数字,逆序输出每个数字,判断数字位数等问题。

    第一个问题:判断数字位数

     

     即任意给出一个数字n,要求统计输出n的位数。

       思路分析: 该问题的处理方法有两种,即”丢个位“与”丢高位“。”丢个位“即对n进行除以10操作,并将其赋值给下一次除以10操作的n,每进行一次操作,计数器加1,直至n为0.统计输出计数器的个数即为n的位数(例:n=123,则n的”丢个位“过程为:123→12(123/10)→1(12/10)→0(1/10));”丢高位“即对n要进行取余操作,每次取余计数器加1,但每次取余时的除数不同(例:n=123,则n的”丢高位位“过程为:123→23(123%100)→3(23%10)→0(3%1)).

        鉴于以上分析,我将在此展示“丢个位”的C语言代码,如下所示:

    #include <stdio.h>  
    #include <math.h>  
    int Figure(int n)  
    {  
        int count = 0;  
          
        do  
        {  
            count++;  
            n /=10;  
        }while(n != 0);  
      
        return count;  
    }  
    int main()  
    {  
            //测试用例  
        printf("%d\n",Figure(0));  
        printf("%d\n",Figure(1));  
        printf("%d\n",Figure(12));  
        printf("%d\n",Figure(123456789));  
        printf("%d\n",Figure(-1));  
        printf("%d\n",Figure(-123456789));  

    }  

         在以上代码实现过程中,我也试图用过while语句实现,但是未通过测试,在我使用测试用例‘0’进行测试的时候发现结果为‘0’,显然有误,这时要想到while和do-while的区别,do-while语句至少执行一次。

    第二个问题:逆序输出每一位数字

    即任意给出一个数字n,要求逆序输出各位上的数字

    思路:得到个位数字,依次打印;

    具体实现代码如下:

    #include <stdio.h>  
    #include <math.h>  
    //逆序输出n的每一位  
    void PrintReverse(int n)  
    {  
        if(n < 0)   
        {  
            printf("-");  
            n = -n;  
        }  
        do  
        {  
            printf("%d ",n%10);  
            n /= 10;  
        }while(n != 0);  
        printf("\n");  
    }  
      
    int main()  
    {  
        //测试用例   
        PrintReverse(123456789);  
        PrintReverse(-123456789);  
        PrintReverse(0);  
    }  

    第三个问题:顺序输出每一位数字

     

     即任意给出一个数字n,要求正序输出各位上的数字。

      结合数字的位数统计,在此可通过位数统计函数的调用(注意接收并进行赋值)进行代码实现,

    #include <stdio.h>  
    #include <math.h>  
    int Figure(int n)  
    {  
        int count = 0;  
          
        do  
        {  
            count++;  
            n /=10;  
        }while(n != 0);  
      
        return count;  
    }  
    //顺序输出n的每位数字  
    void PrintOrder(int n)  
    {  
        int count = Figure(n);  
        int power = 1;  
        for(int i=0;i<count-1;i++)  
        {  
            power *= 10;  
        }  
      
        do  
        {  
            printf("%d ",n/power);  
            n %= power;  
            power /= 10;  
        }while(n != 0);  
          
        printf("\n");  
    }  
    int main()  
    {  
        //测试用例   
        PrintOrder(123456789);  
        PrintOrder(-123456789);  
        PrintOrder(0);  

    }  

    以上就是我对近期学习的C语言数字处理部分的总结,欢迎各位同仁的指正。

     

     

    展开全文
  • 一个int比如322,我想找happy number就得3平方加2平方再加2平方,怎样找到一个一个的数字,就是322%10,得到2,然后/10,然后再%,就可以依次求得每位的数字 happy number需要考虑的循环的问题,处理循环可以...

    一个int比如322,我想找happy number就得3平方加2平方再加2平方,怎样找到一个一个的数字,就是322%10,得到2,然后/10,然后再%,就可以依次求得每位上的数字

     

    happy number中需要考虑的循环的问题,处理循环可以用链表找循环的方式,两个指针。

    转载于:https://www.cnblogs.com/liumeng-blog/p/5251759.html

    展开全文
  • 暴力解就是循环所有的数字循环一个就把它的位数累加,等什么时候超过了n,就说明第n位一定在这个数字中,再具体找到哪一位。 找规律 如果用f(m)表示从开始到位数为m的最大数字的位数之和 则f(0)=0 f(1)=...
  • * 假设我们的环境只能存储得下 32 位的有符号整数, * 则其数值范围为 [−231, 231 − 1]。请根据这假设,如果反转后整数溢出那么就返回 0。 * int型的数值范围是 -2147483648~2147483647, 那么如果我们要...
  • 笔试:某硕公司有一道题,两...对该四位数的每一位都加5,并用和对10取余代替该数字,在将第一位与第四位交换,第二位与第三位交换,得到一个加密数 代码实现如下: public static int secret(int x) { in...
  • 题目一描述:数组只出现一次的数字_牛客网一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求空间O(1),时间O(n)。--------分析:如果只有一次数字,则很容易...
  • 如果把一个正整数的每一位都平方后再求和,得到一个正整数。 对新产生正整数再做同样处理。 如此一来,你会发现,不管开始取是什么数字, 最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈...
  • 的格式序列化得到一个字符序列,在这个序列,第5(从0开始计数)是5,第13是1,第19是4,等等。请写一个函数,求任意第n对应的数字 逐个列举 有一种方法,列举一个数字就记录当前序列长度和,比如...
  • 一个整数“反置数”指是把该整数的每一位数字的顺序颠倒过来所得到的一个整数。如果一个整数末尾是以0结尾,那么在它反置数当中,这些0就被省略掉了。比如说,1245反置数是5421,而1200反置数是21。请...
  • 如果把一个正整数的每一位都平方后再求和,得到一个正整数。 对新产生正整数再做同样处理。 如此一来,你会发现,不管开始取是什么数字, 最终如果不是落入1,就是落入同一个循环圈。 请写出这个循环圈...
  • 题目:给定一个 32 有符号整数,将整数中的数字进行反转。 示例1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 注意: 假设我们的环境只能存储 32 有符号整数,其数值范围是 [−231, 231− 1]。...
  • 首先此题程序主题为如何将一个的每个数字拆分开,首先想到是除以100得到百位数,除以10再减去百位数十倍得到数。然而这样编出程序过于繁琐,故想到了使用更简洁语句执行。十由三数除10再对...
  • 可以用异或,两个相同的数字异或是0,不同的数字异或 不为0分成两组:...1,结果如果是1,就是1然后分别对每一组取异或,分别得到个数字2.*****************数组其他数字出现三次,只有一个出现一次************...
  • 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 解题思路: (1)将整个数组的数字从头到尾...(4)将分好的两组数字分别异或,最终各得到一个数字...
  • /* 一个数组,除两个不同的数字外,两两相同,找到两个不同的数字,输出 * 数组的数,两两相与,然后找到第一个为1的比特,依据在该上数值的不同,按与操作,分成两类 * 每一类都两两相与,得到两个不同...
  • 从头到尾依次异或数组每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。 因为其他数字都出现了两次,在异或全部抵消掉了。 由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也...
  • 从头到尾依次异或数组每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说...
  • 从头到尾依次异或数组每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说...
  • 实现思路: ...将三个元素组成6个元素排列组合列举出来 第二步:从第一步排列组合随机抽取一个排列组合类型...此时就能得到一个6位数随机密码 #生成一个随机密码,不少于6位数(目前下方代码只实现了.
  • 因为需要提取数列中每个数字的首,并能够和本来的数字建立联系,所以这里采用结构体的知识。 有可能存在多个首数字相同的情况,所以,我们需要对于对这种情况手动编写函数来甄别大小,同时还要采取以首数字为...
  • 思路: 一个整型数组只有一个数字出现一次 其他出现2次 考虑异或全部得到唯一这个数字。 同理,将问题分组成2组,组保证有一个出现1次数,且其他数都出现2次。 考虑通过数某一位是否为1...
  • 从头到尾依次异或数组每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说...
  • 两个人玩一个数字游戏,给定两个正整数A,B,两个人轮流从一个数减去另外一个数正数倍,要保证结果非负,首先得到0人获胜。例如:30 8经过一步操作可以变为22 8 或者14 8 或者 6 8。两个人都足够聪明。 输入...
  • 方法1: 这是开始想到方法,代码...#得到a数中的各位上数 def get_wei(a): w = a // 10000 # 万位 q = a % 10000 // 1000 # 千位 b = a % 1000 // 100 # 百位 s = a % 100 // 10 # 十 g = a % 10 # 个位 retu
  • 从头到尾依次异或数组每一个数字,那么最终得到的结果就是两个只出现一次的数字的异或结果。因为其他数字都出现了两次,在异或全部抵消掉了。由于这两个数字肯定不一样,那么这个异或结果肯定不为0,也就是说...
  • 对数组内个数进行按异或( ^ )[因为相同的数字异或后为0,数组只有两个数字出现一次,其余都出现两次,异或出来的结果一定不为0] 得到异或出来的数字的二进制一个为1的位数(右–>左) 将数组的...
  • 题目特地提到只出现一次的数字有两个,所以需要先将数组拆分成两个,个子数组里分配一个出现了一次的数字,然后分别异或即为答案: 将数组内所有数字进行异或,因为其他数字都出现了两次,所以结果为两个只出现...
  • 将数组的每一个元素进行异或,得到的两个不同数字之间异或,因为这两个数字不同,所以异或值必然不为0,所以我们找出异或值的一个为1,按照该数是否为0将数组分成两个子数组A和B,可以知道数组A含有元素...

空空如也

空空如也

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

得到一个数字中每一位的数字