A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

奇幻大虾

初级黑马

  • 黑马币:8

  • 帖子:17

  • 精华:0

© 奇幻大虾 初级黑马   /  2015-1-10 21:06  /  2969 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
#include <stdio.h>
#include <string.h>
int fatoi(char str[])
{
    int s=0,n,i=0,num=0;
    n=strlen(str);
    if(str[0]=='-')
        i=1;
    if(n>10)//n为何>10
        return 0;
    for (;i<n;i++)
    {
        num=(str[i]-48);//48求解释~不懂
        s=s+num;
        if(i<n-1)
           s=s*10;
    }
    if(str[0]=='-')
        s=-s;
    return s;
}
int main()
{
    char sc[10]={"12367890"};   // 调试程序用的数据
          int n;
    n=fatoi(sc);
    printf("\n%d",n);
    getch();
          return 0;
}


最佳答案

查看完整内容

48是字符‘0’对应的ASCII码值,取每个位上的数字,都 需要用对应位上的字符与‘0’字符相减,比如“12367890”中的‘9’,‘9’-'0' = 9 了,这下明白了吧

7 个回复

倒序浏览
48是字符‘0’对应的ASCII码值,取每个位上的数字,都 需要用对应位上的字符与‘0’字符相减,比如“12367890”中的‘9’,‘9’-'0' = 9 了,这下明白了吧
回复 使用道具 举报
c语言不懂   java略懂一二
回复 使用道具 举报
jyl3203217 来自手机 中级黑马 2015-1-11 10:54:38
板凳
对c语言不是太感冒
回复 使用道具 举报
代码:if(n>10)//n为何>10
说明:n 表示的是字符串的长度,如果该字符串能转换成整型数,则表示了整数的位数(符号算1位)。
在内存中int占用4个字节(32 bit),除去符号位还有31 bit,能表示的最大整数不到10亿,
做为十进制整数小于10位(例如,十进制整数231,有3位),所以一个字符串转换成整数的位数过大(例如超过9位),int 类型存放不下,所以要抛弃。

代码:num=(str[i]-48);//48求解释~不懂
说明:正如一楼(@jojo)所说,48是字符‘0’对应的ASCII码值,'0' ~ '9' 中任意一个字符减去48就能得到这个字符所对应的整数值

评分

参与人数 1黑马币 +10 收起 理由
奇幻大虾 + 10 很给力!

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
小徐_y8nUx 来自手机 中级黑马 2015-1-13 12:07:09
7#
学习了!!
回复 使用道具 举报
#include <stdio.h>
#include <string.h>
int fatoi(char str[])
{
    int s=0,n,i=0,num=0;
    n=strlen(str);      //获取str 字符串长度
    if(str[0]=='-')     //如果第一个字符为“-” 负号
        i=1;            //将下标设置为1,表示第一个(下标为0的字符)  不处理 ,从第二个字符开始处理
    if(n>10)            //n为何>10  ,只处理长度为10的字符。
        return 0;       //表示,超过字符长度
    for (;i<n;i++)      //循法 i的初始值由上面if 来定,如果不为“-” 则为 0 ,否则为1
    {
        //num=(str[i]-48);//48求解释~不懂     其实字符在计算机中是一个整数值,如 字符'0' 整数值asc2码是 48   'a' 好像是97  
        num=str[i]-'0';   //上面等价于这句
        s=s+num;        //求和,获取第一位整数值
        if(i<n-1)       //各位不需要进位,所以 i<n-1 注意,n-1就是最后一位(下标从0开始,100个数,那么是0 到 99 最后一个数为 100-1) 不需要进位
           s=s*10;      //进位
    }
    if(str[0]=='-')     //第一位为"-"符号  负号,
        s=-s;
    return s;
}
int main()
{
    char sc[10]={"12367890"};   // 调试程序用的数据
          int n;
    n=fatoi(sc);
    printf("\n%d",n);
    getch();
          return 0;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马