JAVA获得数字 正数和倒数 第几位的几种方法总结和对比

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 

今天的研究成果。原文看这里:JAVA获得数字(正数和倒数)第几位是什么的方法

 

 

JAVA获得某个数字的最后第几位是什么的方法,比如,1234567890,则获得最后第三位,则返回8

 

  1. /** 
  2.  * 获得数字(正数和倒数)第几位是什么的方法。 
  3.  *  
  4.  * @author 老紫竹研究室(laozizhu.com) 
  5.  *  
  6.  */  
  7. public class Test {  
  8.   // 字典,里面保存的是1,10,100,1000..直到long的最大允许位数  
  9.   private static final long[] NUMBERS = new long[19];  
  10.   static {  
  11.     NUMBERS[0] = 1;  
  12.     for (int i = 1; i < 19; i++) {  
  13.       NUMBERS[i] = NUMBERS[i - 1] * 10;  
  14.     }  
  15.   }  
  16.   public static void main(String[] args) {  
  17.     long number = 1234567890123456789L;  
  18.     System.out.println("测试取得倒数第几位");  
  19.     System.out.println(getNumberAtLast(number, 3));  
  20.     System.out.println(getNumberAtLast2(number, 3));  
  21.     System.out.println(getNumberAtLast3(number, 3));  
  22.     int total = 1000000;  
  23.     long begin = System.nanoTime();  
  24.     for (int i = 0; i < total; i++) {  
  25.       getNumberAtLast(number, 3);  
  26.     }  
  27.     System.out.println("getNumberAtLast =" + (System.nanoTime() - begin));  
  28.     begin = System.nanoTime();  
  29.     for (int i = 0; i < total; i++) {  
  30.       getNumberAtLast2(number, 3);  
  31.     }  
  32.     System.out.println("getNumberAtLast2=" + (System.nanoTime() - begin));  
  33.     begin = System.nanoTime();  
  34.     for (int i = 0; i < total; i++) {  
  35.       getNumberAtLast3(number, 3);  
  36.     }  
  37.     System.out.println("getNumberAtLast3=" + (System.nanoTime() - begin));  
  38.     System.out.println("测试取得正数第几位");  
  39.     System.out.println(getNumberAtFirst(number, 3));  
  40.     System.out.println(getNumberAtFirst2(number, 3));  
  41.     begin = System.nanoTime();  
  42.     for (int i = 0; i < total; i++) {  
  43.       getNumberAtFirst(number, 3);  
  44.     }  
  45.     System.out.println("getNumberAtFirst =" + (System.nanoTime() - begin));  
  46.     begin = System.nanoTime();  
  47.     for (int i = 0; i < total; i++) {  
  48.       getNumberAtFirst2(number, 3);  
  49.     }  
  50.     System.out.println("getNumberAtFirst2=" + (System.nanoTime() - begin));  
  51.   }  
  52.   /** 
  53.    * 获得数字的倒数第几位是什么 
  54.    *  
  55.    * @param number 
  56.    *          数字 
  57.    * @param index 
  58.    *          位置 
  59.    * @return 位置上的数字,如果超过了则返回0 
  60.    */  
  61.   public static int getNumberAtLast(long number, int index) {  
  62.     for (; index > 1; index--) {  
  63.       number /= 10;  
  64.     }  
  65.     return (int) (number % 10);  
  66.   }  
  67.   /** 
  68.    * 用字符串的方式进行获得。 
  69.    *  
  70.    * @param number 
  71.    *          数字 
  72.    * @param index 
  73.    *          位置 
  74.    * @return 位置上的数字,如果超过了则返回0 
  75.    */  
  76.   public static int getNumberAtLast2(long number, int index) {  
  77.     String str = Long.toString(number);  
  78.     if (str.length() < index) {  
  79.       return 0;  
  80.     }  
  81.     return str.charAt(str.length() - index) - 0x30// 数字0的字符形式  
  82.   }  
  83.   /** 
  84.    * 通过字典查找倒数第几个数字 
  85.    *  
  86.    * @param number 
  87.    *          数字 
  88.    * @param index 
  89.    *          位置 
  90.    * @return 位置上的数字,如果超过了则返回0 
  91.    */  
  92.   public static int getNumberAtLast3(long number, int index) {  
  93.     return (int) ((number / (NUMBERS[index - 1])) % 10);  
  94.   }  
  95.   /** 
  96.    * 通过字典获得数字的正数第几位是什么 
  97.    *  
  98.    * @param number 
  99.    *          数字 
  100.    * @param index 
  101.    *          位置 
  102.    * @return 位置上的数字,如果超过了则返回0 
  103.    */  
  104.   public static int getNumberAtFirst(long number, int index) {  
  105.     int place = getNumberIndex(number);  
  106.     number /= NUMBERS[place - index + 1];  
  107.     return (int) (number % 10);  
  108.   }  
  109.   /** 
  110.    * 通过字符串获得数字的正数第几位是什么 
  111.    *  
  112.    * @param number 
  113.    *          数字 
  114.    * @param index 
  115.    *          位置 
  116.    * @return 位置上的数字,如果超过了则返回0 
  117.    */  
  118.   public static int getNumberAtFirst2(long number, int index) {  
  119.     String str = Long.toString(number);  
  120.     return str.charAt(index - 1) - 0x30// 数字0的字符形式  
  121.   }  
  122.   /** 
  123.    * 根据字典得到某个数字在long范围内的位置。<br> 
  124.    * 比如0-9就在第0位<br> 
  125.    * 10-99 就在第1位。 
  126.    *  
  127.    * @param number 
  128.    *          数字 
  129.    * @return 位置 
  130.    */  
  131.   private static final int getNumberIndex(long number) {  
  132.     return getNumberIndexR(number, 019);  
  133.   }  
  134.   /** 
  135.    * 简单的二分查找法,查找某个数字在字典中的位置 
  136.    *  
  137.    * @param number 
  138.    * @param left 
  139.    * @param right 
  140.    * @return 
  141.    */  
  142.   private static final int getNumberIndexR(long number, int left, int right) {  
  143.     if (right <= left + 1) {  
  144.       return left;  
  145.     }  
  146.     int mid = (right - left) / 2 + left;  
  147.     if (NUMBERS[mid] > number) {  
  148.       return getNumberIndexR(number, left, mid);  
  149.     } else {  
  150.       return getNumberIndexR(number, mid, right);  
  151.     }  
  152.   }  
  153. }  
/** * 获得数字(正数和倒数)第几位是什么的方法。 *  * @author 老紫竹研究室(laozizhu.com) *  */public class Test {  // 字典,里面保存的是1,10,100,1000..直到long的最大允许位数  private static final long[] NUMBERS = new long[19];  static {    NUMBERS[0] = 1;    for (int i = 1; i < 19; i++) {      NUMBERS[i] = NUMBERS[i - 1] * 10;    }  }  public static void main(String[] args) {    long number = 1234567890123456789L;    System.out.println("测试取得倒数第几位");    System.out.println(getNumberAtLast(number, 3));    System.out.println(getNumberAtLast2(number, 3));    System.out.println(getNumberAtLast3(number, 3));    int total = 1000000;    long begin = System.nanoTime();    for (int i = 0; i < total; i++) {      getNumberAtLast(number, 3);    }    System.out.println("getNumberAtLast =" + (System.nanoTime() - begin));    begin = System.nanoTime();    for (int i = 0; i < total; i++) {      getNumberAtLast2(number, 3);    }    System.out.println("getNumberAtLast2=" + (System.nanoTime() - begin));    begin = System.nanoTime();    for (int i = 0; i < total; i++) {      getNumberAtLast3(number, 3);    }    System.out.println("getNumberAtLast3=" + (System.nanoTime() - begin));    System.out.println("测试取得正数第几位");    System.out.println(getNumberAtFirst(number, 3));    System.out.println(getNumberAtFirst2(number, 3));    begin = System.nanoTime();    for (int i = 0; i < total; i++) {      getNumberAtFirst(number, 3);    }    System.out.println("getNumberAtFirst =" + (System.nanoTime() - begin));    begin = System.nanoTime();    for (int i = 0; i < total; i++) {      getNumberAtFirst2(number, 3);    }    System.out.println("getNumberAtFirst2=" + (System.nanoTime() - begin));  }  /**   * 获得数字的倒数第几位是什么   *    * @param number   *          数字   * @param index   *          位置   * @return 位置上的数字,如果超过了则返回0   */  public static int getNumberAtLast(long number, int index) {    for (; index > 1; index--) {      number /= 10;    }    return (int) (number % 10);  }  /**   * 用字符串的方式进行获得。   *    * @param number   *          数字   * @param index   *          位置   * @return 位置上的数字,如果超过了则返回0   */  public static int getNumberAtLast2(long number, int index) {    String str = Long.toString(number);    if (str.length() < index) {      return 0;    }    return str.charAt(str.length() - index) - 0x30; // 数字0的字符形式  }  /**   * 通过字典查找倒数第几个数字   *    * @param number   *          数字   * @param index   *          位置   * @return 位置上的数字,如果超过了则返回0   */  public static int getNumberAtLast3(long number, int index) {    return (int) ((number / (NUMBERS[index - 1])) % 10);  }  /**   * 通过字典获得数字的正数第几位是什么   *    * @param number   *          数字   * @param index   *          位置   * @return 位置上的数字,如果超过了则返回0   */  public static int getNumberAtFirst(long number, int index) {    int place = getNumberIndex(number);    number /= NUMBERS[place - index + 1];    return (int) (number % 10);  }  /**   * 通过字符串获得数字的正数第几位是什么   *    * @param number   *          数字   * @param index   *          位置   * @return 位置上的数字,如果超过了则返回0   */  public static int getNumberAtFirst2(long number, int index) {    String str = Long.toString(number);    return str.charAt(index - 1) - 0x30; // 数字0的字符形式  }  /**   * 根据字典得到某个数字在long范围内的位置。<br>   * 比如0-9就在第0位<br>   * 10-99 就在第1位。   *    * @param number   *          数字   * @return 位置   */  private static final int getNumberIndex(long number) {    return getNumberIndexR(number, 0, 19);  }  /**   * 简单的二分查找法,查找某个数字在字典中的位置   *    * @param number   * @param left   * @param right   * @return   */  private static final int getNumberIndexR(long number, int left, int right) {    if (right <= left + 1) {      return left;    }    int mid = (right - left) / 2 + left;    if (NUMBERS[mid] > number) {      return getNumberIndexR(number, left, mid);    } else {      return getNumberIndexR(number, mid, right);    }  }}

 

 

运行结果:

测试取得倒数第几位
7
7
7
getNumberAtLast =74142943
getNumberAtLast2=379321953
getNumberAtLast3=37117566
测试取得正数第几位
3
3
getNumberAtFirst =136200830
getNumberAtFirst2=375250207

 

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以这样做: ``` m = int(input("请输入一个正数: ")) # 将数字转换为字符串 m_str = str(m) # 初始化结果变量 result = 0 # 遍历每一数字,并计算其平方和 for char in m_str: result += int(char) ** 2 # 输出结果 print(result) ``` 这段代码会提示用户输入一个正数,然后计算其各数字的平方和,最后直接输出结果。 ### 回答2: 可以使用以下的Python代码来实现题目要求: ```python def sum_of_digit_squares(m): # 将输入的正数转换为字符串形式 num_str = str(m) # 初始化平方和为0 sum = 0 # 遍历每一数字字符串形式 for digit_str in num_str: # 将字符串形式的数字转换为整数 digit = int(digit_str) # 将该数字的平方加到平方和上 sum += digit**2 return sum # 获取用户输入的正数 m = int(input("请输入一个正整数: ")) # 调用函数计算各数字的平方和 result = sum_of_digit_squares(m) # 输出结果 print("各数字的平方和为:", result) ``` 这段代码首先定义了一个函数 `sum_of_digit_squares`,该函数接受一个正整数作为输入,并计算该正整数每数字的平方和。它将输入的正整数转换为字符串形式,然后对于每一数字,将其转换为整数并将其平方累加到平方和上。最后,程序获取用户输入的正数 `m`,调用 `sum_of_digit_squares` 函数计算各数字的平方和,并将结果输出。 ### 回答3: 可以使用以下代码来实现: ``` m = int(input("请输入一个正数m:")) # 初始化平方和为0 sum_of_squares = 0 # 依次计算m的各数字的平方并累加到sum_of_squares中 while m > 0: digit = m % 10 sum_of_squares += digit ** 2 m //= 10 print("各数字的平方和为:", sum_of_squares) ``` 首先,我们使用`input`函数获取用户输入的正数m,并转换成整数类型。然后,我们初始化一个变量`sum_of_squares`作为平方和的初始值为0。 接下来,我们使用一个`while`循环来依次计算m的个、十、百等各数字的平方,并将其累加到`sum_of_squares`中。循环的条件是m大于0,当m除以10取余数得到最后一数字时,我们将其平方加到`sum_of_squares`中,然后通过整除运算`m //= 10`将m的最后一数字去除。这样循环会一直执行直到m变为0。 最后,我们使用`print`函数输出计算结果,即各数字的平方和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值