当前位置: 代码迷 >> 数码设备 >> HDOJ - 1013 - Digital Roots(字符串、范畴)
  详细解决方案

HDOJ - 1013 - Digital Roots(字符串、范畴)

热度:485   发布时间:2016-04-29 02:27:46.0
HDOJ - 1013 - Digital Roots(字符串、范围)

方法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;}