75pts高精度求助
查看原帖
75pts高精度求助
574745
littlesnake楼主2024/9/27 18:43

rt。不知道十六进制为什么会错。

# include <bits/stdc++.h>
# define N 1010
# define ll long long

using namespace std;

int n, m, step, lena, lenb, lenc;
int a[N], b[N], c[N];
string s;

int main () {

	cin >> n;
	if (n == 16) {
		cin >> s;
		lenc = s.size ();
		for (int i = 0; i < s.size (); i ++) {
			if (s[i] >= 'A' && s[i] <= 'F') {
				c[i] = (s[lenc - 1 - i] - 'A') + 10;
			}
		}
	} else {
		cin >> m;
		while (m != 0) {
			c[++ lenc] = m % 10;
			m /= 10;
		}
	}
	while (step <= 30) {
		step ++;
		lena = lenc, lenb = lenc;
		for (int i = 1; i <= lena; i ++) a[i] = c[i];
		for (int i = 1; i <= lenb; i ++) b[i] = a[lena + 1 - i];
		for (int i = 1; i <= lenc; i ++) c[i] = 0;
		for (int i = 1; i <= lenc; i ++) {
			c[i] += (a[i] + b[i]);
			c[i + 1] += c[i] / n;
			c[i] %= n;
		} 
		if (c[lenc + 1] != 0) lenc ++;
		bool flag = true;
		for (int i = 1; i <= lenc; i ++) {
			if (c[i] != c[lenc + 1 - i]) {
				flag = false;
				break;
			}
		}
		if (flag) break;
	}
	if (step <= 30) cout << "STEP=" << step;
	else cout << "Impossible!";

	return 0;

}
 
2024/9/27 18:43
加载中...