[求纠错]GHacker的解谜过关游戏
GHacker的解谜过关游戏题目描述
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()可以解决这个问题,注意转义字符和格式控制字符。
我的想法是,用抑制符剔除符号,保留数并相加,但是一运行就出错。。。(编译没错。。。)
#include <stdio.h>
int main()
{
int a,b,c,d,e,f,g,h,i,j,k;
scanf("%*c%d%*c%*c%*c%d%*c%*c%d%*c%d%*c%*c%*c%*c%d%*c%d%*c%*c%d%*c%*c%d%*c%*c%d%*c%*c%*c%*c%d%*c%d%*c",a,b,c,d,e,f,g,h,i,j,k);
printf("%d",a+b+c+d+e+f+g+h+i+j+k);
return 0;
}
下面是某人的程序,表示看不懂。。。
#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';
else
{
sum=sum+num;num=0;
if(str[i]=='\0')break;
}
}
printf("%d\n",sum);
}
return 0;
}