搜索
bottom↓
回复: 12

【求教】关于用“/”和“%”提取多位数中某一位的用法...

[复制链接]

出0入0汤圆

发表于 2013-6-11 22:23:50 | 显示全部楼层 |阅读模式
本帖最后由 sdf159372008 于 2013-6-11 22:27 编辑

由于是半路出家,没有经过系统的学习,搜索一有些东西仅仅是一知半解,特来求教
有些时候需要提取多位数中的某一个数字显示与LCM上(比如1602)
常用到的就是“/”和“%”
但是我对此的概念比较模糊特来求教
碧柔有一个10位数A=1234567890
如果我要提取出“0”,那么只要A%10,“9”是A%100/10(不知道这样对不对),“8”是A/100(和A%1000/100效果一样?),           
但是我要如何提取出“1”或者“2”呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-6-11 22:38:58 | 显示全部楼层
个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;
.........

出0入0汤圆

发表于 2013-6-11 22:46:26 | 显示全部楼层
就是取商和取余的问题,楼上已经表示出来了

出0入0汤圆

发表于 2013-6-11 22:56:07 来自手机 | 显示全部楼层
你先要明白取余%和取商/到底是怎么操作的。

出0入0汤圆

 楼主| 发表于 2013-6-11 23:13:24 | 显示全部楼层
chengjia535 发表于 2013-6-11 22:38
个位 = X % 10;
十位 = (X / 10) % 10;
百位 = (X / 100) % 10;

好吧……谢谢了!
原来我之前都搞错了啊……

出0入0汤圆

发表于 2013-6-11 23:16:48 | 显示全部楼层
这个东西应该没有对错, 看合理性, 易用性, 时间空间复杂度等

出0入0汤圆

发表于 2013-6-12 11:56:57 | 显示全部楼层
取商和取余啊楼主

楼上都说出来了

最近搞DS18B20,深有感触啊

出0入0汤圆

发表于 2013-6-12 13:31:49 来自手机 | 显示全部楼层
分离 太慢,位数稍多用减法比这类快

出0入0汤圆

 楼主| 发表于 2013-6-12 20:49:59 | 显示全部楼层
tsb0574 发表于 2013-6-12 13:31
分离 太慢,位数稍多用减法比这类快

不差这点儿,STC12C5A60S2+33Mhz的晶振,可以做任何我能做得到的事儿了……
简单玩玩要求不高的……

出0入0汤圆

发表于 2013-6-13 08:20:47 | 显示全部楼层
tsb0574 发表于 2013-6-12 13:31
分离 太慢,位数稍多用减法比这类快

一般我都先转换为bcd来操作

出0入8汤圆

发表于 2013-6-13 09:21:03 | 显示全部楼层
//整数转字符串,最大长度 10 位
void Myitoa(int32_t n, uint8_t str[])
{
    int32_t i, sign;
    uint8_t s[13];
    uint8_t j=0;
    if((sign=n) < 0)
        n=-n;

    i=0;
    do
    {
        s[i++] = n % 10 + '0';
    }while ((n/=10) > 0);

    if(sign < 0)
        s[i++] = '-';

    s[i] = '\0';

    //for (; i>0; i-- )
    do{
        str[j++] = s[i-1];
    }while(--i > 0);
}

出0入0汤圆

发表于 2013-6-13 10:18:18 来自手机 | 显示全部楼层
学习一下....

出0入0汤圆

发表于 2013-6-13 12:34:30 | 显示全部楼层
  1. //LCD显示数字函数,5位等宽
  2. void LCD_write_numbers(uint8 x, uint8 y, int numbers)
  3. {
  4.         uint8 nums[5]={' ', ' ', ' ', ' ', ' '};
  5.         uint16 exp10[5]={1,10,100,1000,10000};
  6.         uint8 n, i=1;
  7.         if(numbers < 0)
  8.         {
  9.                 nums[0]='-';
  10.                 numbers = -numbers;
  11.         }
  12.        
  13.         if(numbers > 9999)
  14.         {
  15.                 LCD_write_string(x, y, "#####");
  16.                 return;
  17.         }
  18.         else if(numbers > 999)
  19.                 n = 4;
  20.         else if(numbers > 99)
  21.                 n = 3;
  22.         else if(numbers > 9)
  23.                 n = 2;
  24.         else
  25.                 n = 1;
  26.        
  27.         while(n)
  28.         {       
  29.                 nums[i] = (uint8)(numbers % exp10[n] / exp10[n-1]) + '0';
  30.                 i++;
  31.                 n--;
  32.         }
  33.         LCD_write_string(x, y, nums);
  34. }
复制代码
这是我写的1602用来显示5位等宽数字的代码。为了节省运算资源与时间,一般用数组来存储10的幂~不知你能理解我的意思不...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表