杭电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 这两个。。。。另一方面。不给你大数的测试实例也是在考察程序员的洞察能力。。。。没事的 题做多了自然会有这种能力的