题目链接:http://acm.fafu.edu.cn/problem.php?id=1261
题目还不算难吧,很多种方法都可以解决的,其中有难得,也肯定有比较简单的,难得就是,不管是数字还是字符,都是一个字符的读取,这种的相对比较麻烦一点吧。
遇到数字的时候,就开始判断了,每次都将数字进行 *10+自身,然后遇到非数字字符退出,这个方法其实是还好的,就是遇到负数的时候就相对比较麻烦一点了。不过也是一种
方法。
下面说说我要介绍的一种,就是直接将整个数字的直接一次性读取,遇到非数字类型进行抛弃,下次遇到数字类型,一次性读取,把每次遇到的数字进行想加,最后的结果
保留三位小数就是所求的答案。
代码如下:
#include <stdio.h>
int main(){
double ans = 0,temp;//一个是用来统计结果,一个是用来存放当前的double类型的小数
char ch;//用来存放其他元素
while(ch != -1){//若是为-1,则说明读取不到字符,即说明输入已经结束
while(scanf("%lf",&temp)==1)//每次遇到输入的类型为double的时候,就一直读取完毕
ans += temp;//将每一次读取到的double类型存放在ans里面
ch = getchar(); //读取完一个double类型之后,开始读取下一个字符,若是读取到的个数不为空,则继续
//循环,若是没有读取到任何字符,则返回值为-1,那么就会直接跳出循环体,则
//输出最后需要的答案
}
printf("%.3lf\n",ans);//得到所求的答案,并按要求保留3位小数
return 0;
}