1 solutions
-
0
高精回文数 emm……M在一百位以内,该上高精度了。
虽然是N进制数,但本题不需要转
因为:
既然是N进制数
请把高精加中的——%10改为%n
请把高精加中的——/10改为/n
其他运算方式不变
这题需要会高精加,高精反转,高精判断回文数和数组存高精度。
不会的同学可以参考一下代码
让我们开始愉快的模拟吧(~ ̄▽ ̄)~……………… 代码:
#include<bits/stdc++.h> using namespace std; int n,q[1000001],l,w[1000001],ans; string s; void x() { int j=0; for(int i=s.length()-1;i>=0;i--) { if(s[i]>='0'&&s[i]<='9') { q[++j]=s[i]-'0'; } else { q[++j]=s[i]-'A'+10; } } } void m(int a[],int b[]) { for(int i=1;i<=l;i++) { a[i]+=b[i]; a[i+1]+=a[i]/n; a[i]%=n; } if(a[l+1]>0) { l++; } } bool f(int a[]) { int ln=l; int i=1; int j=l; while(ln--) { if(ln<l/2) { break; } if(a[i]!=a[j]) { return false; } i++; j--; } return true; } void t(int a[]) { int j=0; for(int i=l;i>=1;i--) { w[++j]=a[i]; } } int main() { cin>>n>>s; x(); l=s.length(); while(!f(q)) { t(q),m(q,w),ans++; if(ans>30)break; } if(ans>30)printf("Impossible!"); else cout<<ans; return 0; }完美结束…………………………………
- 1
Information
- ID
- 386
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 2
- Accepted
- 2
- Uploaded By