精华内容
下载资源
问答
  • C语言求一个数是几位数,不使用循环 C语言求一个数是几位数,不使用循环 C语言求一个数是几位数,不使用循环
  • 求一个数是几位数

    千次阅读 2013-08-28 23:26:38
    在看《数据结构与算法分析》的基数排序时,用到了数字是几位数,最开始我是直接用字符串来计算的,后来想了想,还是到网上找了找答案,把答案的列出的五种方法分别实现了下,看看各自花费的时间。  package ...

         在看《数据结构与算法分析》的基数排序时,用到了数字是几位数,最开始我是直接用字符串来计算的,后来想了想,还是到网上找了找答案,把答案的列出的五种方法分别实现了下,看看各自花费的时间。


      下面的五种方法是csdn的一个问题帖子上别人回复的,怎么找不到原帖了。

    package com.test;
    
    import java.math.BigInteger;
    
    //求一个数十几位数
    //a = 999999999
    //N = 100000000
    //time1 = 10141  //3
    //time2 = 4531   //1
    //time3 = 12781  //5
    //time4 = 11688  //4
    //time5 = 5343   //2
    
    
    
    public class Arithmetic_1 {
    
    	//字符串:第三
    	private int get1(long a){
    		int count = String.valueOf(a).length();  //最开始尝试使用这个方法
    		return count;
    	}
    	
    	//log方法:难道还是这个方法消耗时间最少
    	private int get2(long a){
    		int count = (int) (Math.log10(a) + 1);
    		return count;
    	}
    	
    	//循环:第五
    	private int get3(long a){
    		int count = 0;
    		do {
    			count ++;
    		} while ((a /= 10) > 0);
    		return count;
    	}
    	
    	//递归调用:第四
    	private int get4(long a){
    		int count = 0;
    		count = a < 10 ? 1 : 1 + get4(a/10);
    		return count;
    	}
    	
    	//查表法:这个第二
    	private int get5(long a){
    		//0,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000
    		int[] table = {0x0, 0xa, 0x64, 0x3e8, 0x2710, 0x186A0, 0xF4240, 0x989680, 0x5F5E100,
    				0x3B9ACA00};//最小几位数的十六进制
    		for(int i = 0; i < table.length; i++){
    			if(a >= table[i] && a < table[i + 1]){
    				return i+1;
    			}
    		}
    		return 0;
    	}
    	
    	public static void main(String[] args) {
    		System.out.println("start");
    		Arithmetic_1 arith = new Arithmetic_1();
    		
    		long a = 999999999; //9位数
    		
    		
    		int N = 100000000;
    		
    		BigInteger begin1 = new BigInteger(""+System.currentTimeMillis());
    		for(int i = 0; i < N; i ++){
    			arith.get1(a);
    		}				
    		BigInteger end1 = new BigInteger(""+System.currentTimeMillis());
    		System.out.println("time1 = " + end1.subtract(begin1));
    		System.out.println();
    		
    		BigInteger begin2 = new BigInteger(""+System.currentTimeMillis());
    		for(int i = 0; i < N; i ++){  //这里加循环是因为一次操作,时间太少,不好比较五种方法的所花费的时间
    			arith.get2(a);
    		}
    		BigInteger end2 = new BigInteger(""+System.currentTimeMillis());
    		System.out.println("time2 = " + end2.subtract(begin2));
    		System.out.println();
    		
    		BigInteger begin3 = new BigInteger(""+System.currentTimeMillis());
    		for(int i = 0; i < N; i ++){
    			arith.get3(a);
    		}
    		BigInteger end3 = new BigInteger(""+System.currentTimeMillis());
    		System.out.println("time3 = " + end3.subtract(begin3));
    		System.out.println();
    		
    		BigInteger begin4 = new BigInteger(""+System.currentTimeMillis());
    		for(int i = 0; i < N; i ++){
    			arith.get4(a);
    		}
    		BigInteger end4 = new BigInteger(""+System.currentTimeMillis());
    		System.out.println("time4 = " + end4.subtract(begin4));
    		System.out.println();
    		
    		BigInteger begin5 = new BigInteger(""+System.currentTimeMillis());
    		for(int i = 0; i < N; i ++){
    			arith.get5(a);
    		}
    		BigInteger end5 = new BigInteger(""+System.currentTimeMillis());
    		System.out.println("time5 = " + end5.subtract(begin5));
    		System.out.println();
    	}
    
    }
    

    展开全文
  • 求一个数是几位数的几种方法

    万次阅读 2018-06-12 16:57:30
    种:数字分割法 代码如下: #include <stdio.h> void main() { int x,b=0; scanf("%d",&x); while(x>0) { x=x/10; b++; } printf("%d ",b); } 第二种:log10法 C语言中只有lo...

    第一种:数字分割法

    代码如下:

    #include <stdio.h>
    void main()
    {
        int x,b=0;
        scanf("%d",&x);
        while(x>0)
        {
            x=x/10;
            b++;
        }
        printf("%d ",b);
    }

    第二种:log10法

    C语言中只有log和log10两种函数。 

    如果想表达log a,b 那么可以使用log(b)/log(a)来解决。

    代码如下:

    #include<iostream>
    #include<cmath>
    using namespace std;
    int main() 
    {
        int n;
        cin>>n;
        cout<<(int)(log10(n))+1;
        return 0;
    }

     

    展开全文
  • 求一个数字是几位数(简便)

    千次阅读 2021-03-22 20:40:32
    int maxLength=(max+"").length();
            int maxLength=(max+"").length();
    
    展开全文
  • 一个不多于5位的正整数,要求:(1)出它是几位数;(2)分别输出每一位数字;(3)按逆序输出各位数字,例如原数为321,应输出123。 #include&lt;stdio.h&gt;int main(){ int long x; scanf("%...

    给一个不多于5位的正整数,要求:

    (1)求出它是几位数;

    (2)分别输出每一位数字;

    (3)按逆序输出各位数字,例如原数为321,应输出123。

     

    #include<stdio.h>
    int main()
    {
     int long x;
        scanf("%d",&x);
    if(x<=9)
     {
      printf("%d\n",1);
     printf("%d",x);
     }
    if(x<99&&x>9)
     {
      printf("%d\n",2);
     printf("%d%d",x/10,x%10);
     }
    if(x<999&&x>99)
     {
      printf("%d\n",3);
      printf("%d%d%d",x/100,(x%100)/10,x%10);
    if(x<9999&&x>999)
     {
            printf("%d\n",4);
      printf("%d%d%d%d",x/1000,(x%1000)/100,(x%100)/10,x%10);
     }
    if(x<99999&&x>9999)
     {
            printf("%d\n",5);
      printf("%d%d%d%d%d",x/10000,(x%10000)/1000,(x%1000)/100,(x%100)/10,x%10);
     }
     return 0;
    }
    }
    展开全文
  • 【Java实用程序】求一个数是几位数

    千次阅读 2019-04-08 19:16:02
    int num = 123456; int wei = 0; while (num != 0) { num = num / 10; wei++; } wei 就是出数字的位数
  • 输入一个整数,个数是几位数,并且逆序显示这个数。 #include &lt;stdio.h&gt; int main() { int a,b,c; int i=0; scanf("%d",&amp;a); b=a; while(b&gt;0) { c=b%10; b=b/...
  • 首先我觉得计算机数字位数与人的法不同 人出的有数值意义比如可以念出个十百千的 但是我的方法里 计算机出的一串数字 而不是百这样 ...那么我们就可以利用加减乘除把一个数的各个位数分...
  • //定义一个动态数组 int number; public Zhengshu(int number) { this.number = number; } public int panduan()//位数的判断 { int number1 = number; int a=1; while(number1/10!=0) { ...
  • 求一个数有几位 int main() { int i = 1234; int count = 0;//位数 for(int i = 1;i <= 999999;i++) { //求i为几位数 while(tmp != 0) { count++; tmp = tmp/10;//123 12 1 } return 0; } 求数字每一位...
  • #include &lt;stdio.h&gt; int main() { int n;int count=0; scanf("%d",&amp;n); do { count ++; n/=10; } while(n!=0); return count; }
  • 判断一个是不是回文数/回文内容,逆序输出一个数 * 判断一个是不是回文数。 * 判断是否为回文内容 * 给一个数求是几位数,逆序输出这个数
  • int i=5555; for(i=0;a>0;i++){ a = a/10; } System.out.println(i);
  • 题目:给一个不多于5位的正整数,要求:一、是几位数,二、逆序打印出各位数字。??? //使用了长整型最多输入18位 */ //1.把整数转换成字符串 String ss = Integer.toString(n);||String ss = String.valueOf(n);...
  • 给出一个不多于5位的整数,要求 1、出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字 输入: 一个不大于5位的数字 输出: 输出三行, 第一行 位数, 第二行 用空格分开的每个数字,注意最后一个数字后...
  • C#怎么求一个整数是几位数,如果不转字符串的话?
  • #include <stdio.h> int main(){ ...printf(“请输入一个正整数 x \n”); scanf("%d",&x); while(x>0){ i++; y=x%10; n=n*10+y; x/=10; } printf(“x是%d位数\n逆序数是%d”,i,n); return 0;...
  • 完整题目如下: ​ 根据题目,我在编写代码时直接定义了五整型。然后通过对每位的计算和...然后通过判断结果是否为0,来判断是几位数。代码如下: int num(long int x) { long int a,b,c,d,e; printf(...
  • 给出一个不多于五位的正整数,出它是几位数
  • 输入一个正整数,出它是几位数

    万次阅读 2018-07-12 23:48:25
    C语言:输入一个正整数,出它是几位数 并将其按倒序输出如:123,输出为321. #include <stdio.h> int Show(int x)//判断位数 { int n=0; while(x!=0) { n++; x/=10; //x=x/10 } return n; } ...
  • 求一个数是几进制

    2018-10-26 17:43:41
    例题1(题来自图论刷题)   在某系统中,等式15*4=112...在这题中,我们用两乘数的个位相乘,即5*4=20, 然后用各个选项试一下, A:末位为2 B:末位为6 C:末位为4 D:末位为2   这样即可排除B,C ...
  • 出它是几位数; ②分别输出每位数字; ③按逆序输出各位数字 ,例如原数为 321, 应输出 123. 算法为: 源代码 int Count(int n)//计数函数 { int count=0;//计数器 if(n==0) { return 1; } while(n!=0...
  • C语言基础 输入的数字是几位数

    万次阅读 2018-10-15 13:45:23
    问题:任意输入一个整数,是一个几位数字? 思路:每次除以10,则去掉一位数,统计一次。经过循环,直到最后一位数,除以10为0,停止循环,停止统计。 代码: (1)使用for循环 #include&amp;amp;lt;stdio...
  • 分别一位上的数字,关系如下: 万位上的:ten_thousand=num/10000; 千位上的:thousand=(num%10000)/1000; 百位上的:hundred=(num%1000)/100;...求个位上的:indiv=num%10; ...

空空如也

空空如也

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

求一个数是几位数