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

来源:互联网 发布:linux黑客工具 编辑:程序博客网 时间:2024/04/27 21:19

方法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);  #endifchar 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);  #endifint n = 0;while (cin >> n && n){while (n >= 10)n = Found_Root(n);cout << n << endl;}return 0;}

0 0
原创粉丝点击