大数加法--回文数
2014-03-19 18:23
288 查看
Problem 118: 回文数
Time Limit:1 Ms| Memory Limit:64 MB
Difficulty:
Description
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=16)进制数M(其中数字为0-9大于,10进制的字母为A-F),求最少经过几步可以得到回文数。
如果在40步以内(包含40步)不可能得到回文数,则输出“Impossible!”
Input
两行,N与M
Output
如果能在40步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
Sample Input
9
87
Sample Output
STEP=6
Hint
M < 20位
思路:注意题目里说的m是小于20位的数,有可能是19为,long long 只能表示到18位,故要用大数。另外,输入的m有可能包含A -- Z,不要忘了处理这种情况。
Time Limit:1 Ms| Memory Limit:64 MB
Difficulty:
Description
若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。
例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。
又如:对于10进制数87:
STEP1:87+78 = 165 STEP2:165+561 = 726
STEP3:726+627 = 1353 STEP4:1353+3531 = 4884
在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。
写一个程序,给定一个N(2<=N<=16)进制数M(其中数字为0-9大于,10进制的字母为A-F),求最少经过几步可以得到回文数。
如果在40步以内(包含40步)不可能得到回文数,则输出“Impossible!”
Input
两行,N与M
Output
如果能在40步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号)
Sample Input
9
87
Sample Output
STEP=6
Hint
M < 20位
思路:注意题目里说的m是小于20位的数,有可能是19为,long long 只能表示到18位,故要用大数。另外,输入的m有可能包含A -- Z,不要忘了处理这种情况。
#include<stdio.h> #include<string.h> int main(){ int n, len, l, i, step, flag; int a[300], result[300]; char m[30]; scanf("%d %s", &n, m); len = strlen(m); memset(a, 0, sizeof(a)); l = 0; for(i = len - 1; i >= 0; i--){ if(m[i] >= '0' && m[i] <= '9') a[l++] = m[i] - '0'; else a[l++] = m[i] - 'A' + 10; } step = 0; while(1){ if(step > 40){ printf("Impossible!\n"); break; } flag = 0; for(i = 0; i < l; i++){ if(a[i] != a[l - i - 1]){ flag = 1; break; } } if(!flag){ printf("STEP=%d\n", step); break; } memset(result, 0, sizeof(result)); for(i = 0; i < l; i++){ result[i] = a[i] + a[l - i - 1]; } for(i = 0; i < 295; i++){ result[i + 1] += result[i] / n; result[i] %= n; a[i] = result[i]; } for(i = 294; i >= 0; i--){ if(a[i]){ l = i + 1; break; } } step ++; } return 0; }
相关文章推荐
- 微软开放了.NET 4.5.1的源代码
- 2014-03-19周三:输出string字符串的内容用c_str()
- android中Bitmap数据如何释放
- Python深入01 特殊方法与多范式
- Python进阶09 动态类型
- 敏捷开发综述
- Solr suggest 搜索建议功能 配置问题
- context.Request.Files post 上传问题件
- <activity-alias>详解
- 乘法口诀表(九九表)
- C#获得反射类属性;获取时间段内,选中的星期(可以多个)匹配的天数
- axis2 发布webservice
- xfire发布webservice
- 第四周 统计工资数目
- 三角形2
- 用matlab求1!+2!+...+7!
- html input输入框的自动关联功能
- Python进阶08 异常处理
- 泛型(CSDN转载)
- xfire发布webservice