WOJ-313 K尾相等数

来源:互联网 发布:怎么成为一个程序员 编辑:程序博客网 时间:2024/06/05 22:39

点击这里查看题目
这道题做好数据防溢出工作就行了。没写k的取值范围,万一上来就给个0x7fffffff呢(虽然我下面的代码没防这么骚的操作也过了)……
因为取模1000的值,所以,时间复杂度完全不用担心,while循环不会超过1000次
有个必要知识点我一直当常识使用但不知道怎么证明:(a%1000)*(b%1000)=a*b%1000

#include<iostream>#include<map>using namespace std;map<int ,int> mp;int main(){    int k;    while(cin>>k)    {        if(k==0)break;        int a=k,st=1;        mp.clear();        while(a<1000)st++,a*=k;        int mo=a%1000;        while(mp[mo]==0)        {            mp[mo]=st;            st++;            a=mo*(k%1000);            mo=a%1000;        }        //cout<<st<<endl;cout<<mp[mo]<<endl;        cout<<st+mp[mo]<<endl;    }}
原创粉丝点击