一道acm题目一直Time Limit Exceeded,各位大侠帮帮忙

大侠帮帮忙,我搞了很久,还是不行.题目如下:Description:给出一个字符串S(S仅由’0’~’9’组成,且不包含空格,长度≤100),请将其各个数字按个数打印出,... 大侠帮帮忙,我搞了很久,还是不行.
题目如下:
Description:
给出一个字符串S(S仅由’0’~’9’组成,且不包含空格,长度≤100),请将其各个数字按个数打印出,并且输出各个数字之和。

Input:
第一个行整数N为测试数据组数。接下来N行为S
Output:
如果数字i(0≤i≤9)出现的次数大于0则输出i : Ai (Ai为i出现的次数),并在末尾输出S中各个数字的和,每组输出结束后空一行。
Sample Input:
2
0012
13588
Sample Output:
0:2
1:1
2:1
3

1:1
3:1
5:1
8:2
25

#include <stdio.h>
int main ()
{
int n;
while (scanf("%d",&n)!=EOF)
{
getchar();
while(n--)
{
int b[10]={0};
char d;
int q=0,sum=0;
while(d=getchar())
{
if(d=='\n') break;
int e = d- '0';
b[e]++;
}
for(q=0;q<10;q++)
{
if(b[q]!=0)
{
printf("%d:%d\n",q,b[q]);
sum=sum+q*b[q];
}
}
printf("%d\n\n",sum);
}
}
return 0;
}
以上是我的代码.麻烦看一下!!!
我同学用c++语言,跟我差不多的.提交成功了,代码如下:
#include<iostream>
#include<string>
using namespace std;

int main()
{
int N;
while(cin>>N)
{
getchar();
while(N--)
{
int num[10] = {0};
int sum = 0;
while(cin.peek()!='\n')
{
int e = getchar() - '0';
num[e]++;
}
for(int i = 0; i <= 9; i++)
{
if(num[i] != 0)
{
cout<<i<<":"<<num[i]<<endl;
sum += i*num[i];
}
}
cout<<sum<<endl<<endl;
getchar();
}
}
return 0;
}
展开
 我来答
eire1224
2009-08-31 · TA获得超过407个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:289万
展开全部
你程序的输入有问题,看不懂你是想要怎么去读。。
一个简单点的办法:

char str[101];
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
。。。 //对str的处理和之后的代码
}

补充:首先 读第一个数 是只读一遍的,不用写在循环条件里面
然后 getchar()是会把空格回车全部读进去的 使用scanf读字符串要好的多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jiazheng2222
2009-08-31 · TA获得超过127个赞
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:94.9万
展开全部
没问题啊,我在OJ上试了一下没问题啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-09-04
展开全部
修改过的代码已发给你了..AC了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式