1168: 账单(指针专题)

1168: 账单(指针专题)
时间限制: 1 Sec 内存限制: 128 MB
提交: 3553 解决: 2054
[状态] [讨论版] [提交] [命题人:admin]
题目描述
每到月末,小明就会对这个月的支出账单进行整理和统计。如今电脑已经普及大学校园,所以小明想让电脑帮忙做这件事情。聪明的你就为小明编一个程序来完成这件事情吧。

输入
多实例测试。首先输入一个整数ncase,表示测试实例的个数。每个测试实例的输入如下:

第一行是整数n (n<100)。然后是n行的账单信息,每一行由事物的名字name和对应的花费c组成,长度不超过200。中间会有一个或多个空格,而每一行的开头和结尾没有空格。 0.0 < c < 1000.0。

输出
每个测试实例对应一行输出,输出总的花费,小数点后保留一位数字。

样例输入 Copy
2
1
Buy books 62.28
3
Apple 2.3
Buy clothes for girl friend 260.5
Go to cinema 30
样例输出 Copy
62.3
292.8

本题用字符串相应的函数sscanf读取并格式字符串中的数据,也可以,而且更加方便

#include<stdio.h>
#include<string.h>
double price(char *x,int n)
{
	int i,k=n,num;
	double sum1=0.0,sum2=0.0;
	for(i=n-1;i>0;i--)//找出小数和整数的位置
	{
		if(*(x+i)=='.')
			k=i;
		if(*(x+i)>='0'&&*(x+i)<='9'&&*(x+i-1)==' ')//从右到左找最后一个数字的位置
		{
			num=i;
			break;
		}
	}
	for(i=num;i<k;i++)//求整数部分
		sum1=(*(x+i)-'0')+sum1*10;
	for(i=n-1;i>k;i--)//求小数部分,如果没有小数部分,则k=n,大于i,这段不执行
		sum2=(*(x+i)-'0')*1.0/10+sum2/10;
	return(sum1+sum2);
}
int main()
{
	double price(char *x,int n);
	char str[200];
	double p[100]={0};
	int ncase,n,i,j;
	scanf("%d",&ncase);
	for(i=0;i<ncase;i++)
	{
		scanf("%d",&n);
		for(j=0;j<n;j++)
		{
			getchar();//拿掉回车
			gets(str);
			p[i]=p[i]+price(str,strlen(str));//计算每组用例的价格
		}
	}
	for(i=0;i<ncase;i++)
		printf("%0.1f\n",p[i]);
	return 0;
}

发布了104 篇原创文章 · 获赞 1 · 访问量 1147

猜你喜欢

转载自blog.csdn.net/YGGZZZ/article/details/104842785
今日推荐