您的位置:首页 > 其它

寒假集训附加题目题解报告(6)——数位根

2013-01-21 20:03 501 查看
这题气得我要半死!总是TLE,T泥煤啊!!!想了半天不知道怎么优化!原来出现在输入0它不退出!!!!!!!

http://acm.sdut.edu.cn:8080/judge/contest/view.action?cid=5#problem/E

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[10010];
int main()
{

    while(scanf("%s",a)&&strcmp(a,"0")!=0)
    {
        int sum=0;
        for(int i=0;i<=strlen(a)-1;i++)
        {
            sum+=a[i]-'0';
        }
        if(sum%9==0){cout<<"9"<<endl;}
        else {cout<<sum%9<<endl;}
    }
}
思路正常,就是最后取9的模用GCD证明就可以了,详见《初等数论》。。。

一开始做的时候没想那么多,就在设想,即便是10000位,每一位都是最大的数字9,他们的总和不过是99999,然后再ans+=sum%10;sum/=10;就可以了。所以一开始的代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char a[10010];
int main()
{

    while(scanf("%s",a)&&strcmp(a,"0")!=0)
    {
        int sum=0;
        for(int i=0;i<=strlen(a)-1;i++)
        {
            sum+=a[i]-'0';
        }
        int ans=0;
        while(sum>=1)
        {
            ans+=sum%10;
            sum/=10;
        }
        cout<<ans<<endl;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: