2982 循环数

#include 
using namespace std;
string mult(string s, int a)
{
    int c = 0, d;
    for(int i = s.length()-1; i >= 0; i--)
    {
        d = (s[i]-'0')*a+c;
        c = d/10;
        s[i] = d%10+'0';
    }
    if(c > 0)//如果乘完位数变多,则不考虑这种情况,直接返回空字符串 
        return string("");
    else
        return s;
}
bool isSame(string st, string s)//s是否与st循环相等
{
    string s1, s2;
    if(s.length() != st.length())//如果二者长度不等,那么肯定不同。 
        return false;
    for(int i = 0; i < s.length(); ++i)//下标0~i-1为子串s1,下标i到末尾为子串s2 
    {
        s1 = s.substr(0, i);
        s2 = s.substr(i, s.length()-i);
        if(s2+s1 == st)//s1接在s2右侧,看是否与st相同 
            return true;
    }
    return false;
}
int main()
{
    string s, st;
    cin >> st;
    for(int i = 1; i <= st.length(); ++i)
    {
        s = mult(st, i);
        if(isSame(st, s) == false)
        {
            cout << 0;
            return 0;//直接结束
        }
    }
    cout << 1;
    return 0;
}

你可能感兴趣的:(c++,算法,数据结构)