方法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;
}HDOJ - 1013 - Digital Roots(字符串、范围),布布扣,bubuko.com
HDOJ - 1013 - Digital Roots(字符串、范围)
原文:http://blog.csdn.net/u013545222/article/details/21178933