1 条题解
-
0
C :
#include <stdio.h> int x2i(char c) { if (c >= 'A') return c - 55; else return c - 48; } //转化为十进制 long scanf_kint(int k) { char str[1024]; scanf("%s", str); int i = 0; long n = 0; while (str[i]) { n = n * k + x2i(str[i]); i++; } return n; } //转化为十进制 int aba( long n, int k)//将十进制转化为k进制,判断是否为回文数 { char str[1024]; int i = 0, j; while (n > 0) { str[i++] = n % k; n /= k; } for (j = 0; j < i / 2; j++) if (str[j] != str[i - j - 1]) break; return j == i / 2 ? 1 : 0; } long calc( long n, int k) { long r = n; char str[1024]; int i = 0, j; while (n > 0)//将十进制转化为k进制再将k进制倒着转化为十进制,相加; { str[i++] = n % k; n /= k; } n = 0; for (j = 0; j < i; j++) n = n * k + str[j]; return r + n; } int main() { int i, k; long n; scanf("%d", &k); n = scanf_kint(k); for (i = 0; i < 30; i++) { if (aba(n, k)) break; n = calc(n, k); } if (i == 30) printf("Impossible!"); else printf("STEP=%d\n", i); return 0; }
C++ :
#include<iostream> #include<algorithm> #include<cstring> #include<ctime> #include<cmath> #include<string> #include<cstdio> using namespace std; //生成测试数据 void initData() { srand((int)time(NULL)); for(int cas = 0; cas < 10; ++cas) { } } bool judge(string s) { int len = s.length(); int i = 0, j = len - 1; while(s[i] == s[j]) { i++, j--; if(i >= j) return true; } return false; } string add(string s1, string s2, int n) { int len = s1.length(); int t = 0; string s; //cout<<s1<<"---"<<s2<<endl; for(int i = 0; i <= len; ++i) s += (char)0; for(int i = len-1; i >= 0; --i) { int d = s1[i] + s2[i] + s[i+1]; if(s1[i] >= 'A' && s1[i] <= 'F') d = d - 'A' + 10; else d = d - '0'; if(s2[i] >= 'A' && s2[i] <= 'F') d = d - 'A' + 10; else d = d - '0'; //cout<<d<<"**"<<"\t"; if(d >= n) d -= n, s[i] += 1; if(n == 16 && d >= 10) d += 'A' - 10; else d += '0'; s[i+1] = (char)d; } string s3 = ""; if(s[0] == 0){ for(int i = 1; i <= len; ++i) s3 += s[i]; return s3; } else { s[0] = s[0] + '0'; } //cout<<s<<"***"<<endl; return s; } int main() { //freopen("test.in", "w", stdout); //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); //initData(); string s, s1, s2; int n; cin>>n>>s; if(judge(s)) cout<<"STEP="<<0<<endl; else { bool f = false; for(int i = 0; i < 30; ++i) { s1 = ""; for(int j = s.length() - 1; j >= 0; --j) s1 += s[j]; s = add(s, s1, n); //cout<<s<<endl; if(judge(s)) { printf("STEP=%d\n", i+1); f = true; break; } } if(!f) puts("Impossible!"); } return 0; }
- 1
信息
- ID
- 3448
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者