有点难度,借鉴了其他同学的,感觉写得很好,略作修改
#include <stdio.h>
#include <math.h>
long long huiwen(long long M, int N) {
long long out = 0;
while (M != 0) {
if (N < 11) {
out = out * 10 + M % 10;
M = M / 10;
} else {
out = out * 16 + M % 16;
M = M / 16;
}
}
return out;
}
long long sum(long long M, long long huiwen_M, int N) {
int num, jin = 0, i = 0;
long long out = 0;
while (M != 0) {
if (N < 11) {
num = M % 10 + huiwen_M % 10 + jin;
out = out + num % N * pow(10, i);
jin = num / N;
M = M / 10;
huiwen_M = huiwen_M / 10;
i++;
} else {
num = M % 16 + huiwen_M % 16 + jin;
out = out + num % N * pow(16, i);
jin = num / N;
M = M / 16;
huiwen_M = huiwen_M / 16;
i++;
}
}
if (N < 11) out = out + jin * pow(10, i);
else out = out + jin * pow(16, i);
return out;
}
int main() {
int N, step = 0, jud = 1;
long long M;
scanf("%d", &N);
if (N < 11) scanf("%lld", &M);
else scanf("%X", &M);
while (M != huiwen(M, N)) {
if (step > 30) {
jud = 0;
break;
}
M = sum(M, huiwen(M, N), N);
step++;
}
if (jud == 1) printf("STEP=%d", step);
else printf("Impossible!");
return 0;
}