方法2:用字符串处理,基础题。但是将temp[i]赋值给s[i]的时候如果不加大括号会出现s[i]的值复制不上的问题,寒假做题遇到过,这次又卡了好长时间。但是把这一块包括其他部分的大括号整理一下后,删除这的大括号居然也可以了。有点郁闷,不知道为什么,不过以后尽量都加上,即使一行也加上,一是清晰,二是确保不会出现这样的问题。只是看起来多了点。
AC代码:
#include <iostream> #include <iomanip> #include <string> #include <cstring> #include <cstdio> #include <queue> #include <stack> #include <algorithm> #include <cmath> #include <ctime>using namespace std; int CalSum(char s[]){ int i = 0, sum = 0; for (i = 0; i < strlen(s); i++) sum += s[i] - '0'; return sum;}void Rewrite(char s[], int sum){ char temp[1000]; int i = 0, j = 0; memset(temp, '\0', sizeof(temp)); for (i = 0; sum != 0; i++) { temp[i] = (sum % 10) + '0'; sum /= 10; } for (j = 0, i = i-1; i >= 0; j++, i--) { s[j] = temp[i]; } return;}int main(){#ifdef Local freopen("a.in", "r", stdin); #endif char s[1000]; while (cin >> s && s[0] != '0') { while (true) { int sum = CalSum(s); if (sum >= 10) { memset(s, '\0', sizeof(s)); Rewrite(s, sum); } else { cout << sum << endl; break; } } } return 0;}
方法1(WA):用整型(或者long long)处理,都错误,范围不够。
#define Local#include <iostream> #include <iomanip> #include <string> #include <cstring> #include <cstdio> #include <queue> #include <stack> #include <algorithm> #include <cmath> #include <ctime>using namespace std; int Found_Root(int n){ int sum = 0; while (n >0) { sum += n % 10; n /= 10; } return sum;}int main(){#ifdef Local freopen("a.in", "r", stdin); #endif int n = 0; while (cin >> n && n) { while (n >= 10) n = Found_Root(n); cout << n << endl; } return 0;}