您的位置:首页 > 其它

杭电1013 AC了

2016-04-21 18:51 274 查看
虽然感觉这道题很简单,但我改了3次才ac。这里的重点是  n的大小不确定,他可以是几十位甚至几百位 这时我们们不能简单的用double就能搞定的。所以要用字符数组。这里我用的是char n[1000];上代码:#include<iostream>#include<string>using namespace std;int a[10000];int j, i;int M(int m){	int sum = 0;	if (m<10)return m;	else	{		for (int i = 0;; i++)		{			a[i] = m % 10;			m = m / 10;			j = i;			if (!a[i] && m == 0)break;		}		for (i = 0; i<j; i++)			sum = sum + a[i];		if (sum >= 10)M(sum);		else return sum;	}}int main(){	char n[1000];	while (cin >> n)	{		memset(a, 0, sizeof(a));		double d = strlen(n);		int sum1 = 0;		for (i = 0; i<d; i++)			sum1 += n[i] - 48;		if (sum1 == 0)break;		cout << M(sum1) << endl;	}	return 0;}这道题我用了递归,递归的内容是  sum1.本来写着感觉就有点悬,但还是ac 了。。说实话,杭电应该给个大数的测试实例。不应该用12 39 这两个。。。。另一方面。不给你大数的测试实例也是在考察程序员的洞察能力。。。。没事的 题做多了自然会有这种能力的

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: