高精乘有些离谱问题,不知道是为什么。 现在发现的就是除了第一次乘,后面每次乘都会变成乘 33 (样例)。
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
int a[1010];
void read()
{
string s;
cin >> s;
a[0] = s.size ();
for (int i = 1; i <= a[0]; i++)
a[i] = s[a[0] - i] - '0';
}
void print()
{
// cout << a[0] << endl;
for (int i = a[0]; i >= 1; i--) cout << a[i];
cout << endl;
}
string change()
{
string s = "";
for (int i = a[0]; i >= 1; i--) s += a[i] + '0';
return s;
}
// friend bool operator < (node x, node y)
// {
// return x.a[0] < y.a[0];
// }
};
map <string, bool> mp;
int k;
node operator * (node a, node b)
{
node c;
c.a[0] = a.a[0] + b.a[0] - 1;
for (int i = 1; i <= a.a[0]; i++)
for (int j = 1; j <= b.a[0]; j++)
c.a[i + j - 1] += a.a[i] * b.a[j];
for (int i = 1; i <= c.a[0] - 1; i++)
{
c.a[i + 1] += c.a[i] / 10;
c.a[i] %= 10;
}
while (c.a[c.a[0]] / 10)
{
c.a[++c.a[0]] = c.a[c.a[0] - 1] / 10;
c.a[c.a[0] - 1] %= 10;
}
while (c.a[0] > 1 && c.a[c.a[0]] == 0)
c.a[0]--;
// c.print ();
while (c.a[0] > k) c.a[c.a[0]--] = 0;
return c;
}
signed main()
{
node a;
a.read ();
// a.print ();
cin >> k;
node tep = a;
while (!mp.count (tep.change ()))
{
mp[tep.change ()] = true;
// tep.print ();
tep = a * tep;
// a.print ();
// tep.print ();
}
cout << mp.size () << endl;
return 0;
}