课后作业中不太懂这句命令什么意思,求大佬帮助!
……{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
}
……
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
题目要求是 将用户输入的字符串中代表数字的字符转换为整型数值。但我不太理解标红这一句是什么意思,脑子好像转不过来了,求解答!
这个你要看看ascii码表就知道了
假设你输入 asq1w1w2 ,能够满足if语句的是 ‘1’ ‘1’ ‘2’
每一个字符都是有对应的ascii码,字符的0~9对应ascii也是连续的,所以ch - '0得到的正好是转换成整型的它
比如 ‘1’对应的ascii是 49,而 ‘0’ 是 48,所以‘1’ - ‘0’ = 49 -48 =1,即 int("1"),剩下的以此类推
因为你最终打印的结果是112,因为已经转换成整型,要想在第一个1后面加上第二个1,只能进十,2也如此,所以10 * num作用是进位给后边的数腾空间 https://static01.imgkr.com/temp/2b5abbdeb59e467b9fe2fe2f92fecfdd.png 本帖最后由 桃花飞舞 于 2021-10-6 13:08 编辑
这两句就是把char数字转换成int型的数字。最后输出int型的数字,不过这个num*10和循环一起解决了int型数字的十百千万的位,而(ch-'0')解决了个位的数字。
我想到了这个题
反转整数 : 给定一个 32 位有符号整数,将整数中的数字进行反转。
int reverse(int x) {
int ret=x,num=0;
while(ret!=0)
{
//记录num改变之前的值
int tmp=num;
num=num*10+ret%10;
//用已经改变的数去逆向推是否等于tmp,不等于则证明已经溢出,返回0
if((num-ret%10)/10!=tmp)
//若溢出num所求的余数和ret所求的余数肯定不相等,若不相等返回0
if(num%10!=ret%10)
return 0;
ret/=10;
}
return num;
}
这题的num = num*10+ret%10;用的和你这里的num=num*10+(ch - '0');是一样的意思。 字符串比较,
先将字符串通过ASCII表转成int类型
然后在做+-
判断后转成bool类型 桃花飞舞 发表于 2021-10-6 10:33
这两句就是把char数字转换成int型的数字。最后输出int型的数字,不过这个num*10和循环一起解决了int型数字 ...
举一反三太厉害了!!谢谢大神!
页:
[1]