解题思路:明白十进制的加法:逢十进一, 借一当十,其他进制数类似;
注意事项:在10进制以上的进制数,有这样的对应关系:10-A,11-B,12-C,13-D,14-E,15-F,我们可以用map来进行对应,计算时利用键,而存储结果时利用值;
参考代码:
#include <bits/stdc++.h> #define maxlongint 1001 #define limit 30 using namespace std; char str[maxlongint] = {0}; char result[maxlongint] = {0}; map<int, char>mybinary; void initial()// 处理10进制数以上进制的转换 { for(int i=0; i<10; i++) mybinary[i] = '0'+i; for(int i=10; i<16; i++) mybinary[i] = i-10+'A'; } bool judge(char *str, int flag) //判定是否位回文数 { int left = 0, right = flag-left; while (left<right) { if(str[left] != str[right]) break; else { left++; right--; } } if(left < right) return false; else return true; } int main() { int binary; //进制数(2,8,10,16) initial(); cin >> binary; scanf(" %s", str); //给定进制数; int flag = strlen(str)-1; int cot = 0; //计算执行加法的次数; while (cot++ < limit) { int left = 0, right = flag-left; int mod = 0; //处理进位; int tmt; while (left <= flag) { /*以下的两条if结构处理(10-A,11-B,12-C,13-D,14-E,15-F)*/ if('A'<=str[left] && str[left]<='F') str[left] -= 7; if('A'<=str[right] && str[right]<='F') str[right] -= 7; tmt = (str[left]-'0') + (str[right]-'0') + mod; result[left] = mybinary[tmt%binary]; mod = tmt/binary; left++; right--; } if(mod == 1) { result[left] = 1+'0'; flag++; } if(judge(result, flag)) break; else strcpy(str, result); } if(cot > limit) cout << "Impossible!" << endl; else cout << "STEP=" << cot << endl; return 0; }
0.0分
3 人评分
点我有惊喜!你懂得!浏览:1462 |
C语言训练-求函数值 (C语言代码)浏览:944 |
钟神赛车 (C语言代码)浏览:911 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:693 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:631 |
用筛法求之N内的素数。 (C语言代码)浏览:711 |
【偶数求和】 (C语言代码)浏览:460 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:627 |