问题 H: GHacker的解谜过关游戏
时间限制: 1 Sec 内存限制: 2 MB提交: 7294 解决: 4477
[提交][状态][讨论版]
题目描述
GHacker最近痴迷于一个新上市的解谜游戏,其中一关的过关是破解一个字符串S。经过3天的冥思苦想,GHacker成功的搞明白了这其中的奥秘,把串S中的整数取出来求和,就可以过关了。但是GHacker的数学实在糟糕。他无法在短暂的时间内算出来,只好求助Jackie。Jackie观察到虽然每次出现的数字不同,但是其它的符号并不会变化。于是Jackie编写了一个非常短的程序,帮助GHacker把这一关过了。
输入
输入为串S,只有一行。
输出
串S中用非数字(0~9)分隔开的非负整数之和,不会超出int类型的数据范围。
样例输入
`13?:[7514],54.487=="(438922x159??392)%032\n111cdef120$95;
样例输出
447899
提示
scanf()可以解决这个问题,注意转义字符和格式控制字 1 #include<stdio.h>
#include<stdio.h> int main() { int i,sum,num; char str[1000]; while(scanf("%s",str)!=EOF) { num=sum=0; for(i=0;;i++) //因为字符是一直输入的; { if(str[i]>='0' && str[i]<='9') num=num*10+str[i]-'0'; //‘0’的作用相当于将str[]里面的字符型数字转换成整型; else //str[i]-'0' 就是数字字符的ascii码转换成数值 { sum=sum+num;num=0; //比如'9'=57 因为数字的ascii码是连续的所以'9'-'0'=57-48=9 if(str[i]=='\0')break; //'0'代表停止输入了; } } printf("%d\n",sum); } return 0; }
num=num*10+str[i]-'0';关键代码,数组挨个接收字符,如果接收到fff5gdg就是数值5,如果****55**就是数值55,
因为上一个*10刚好去了十位,以此不断for循环,更多连续数字出现就再多乘以10