题目1080:进制转换
来源:互联网 发布:知乎首页代码 编辑:程序博客网 时间:2024/06/14 13:03
- 题目描述:
将M进制的数X转换为N进制的数输出。
- 输入:
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
- 输出:
输出X的N进制表示的数。
- 样例输入:
16 10F
- 样例输出:
15
- 提示:
输入时字母部分为大写,输出时为小写,并且有大数据。
代码:
#include <stdio.h>#include <string.h>struct bigInteger { int digit[100]; int size; void init() { for(int i=0;i<100;i++) digit[i] = 0; size = 0; } void set(int x) { init(); do { int tmp = x % 10000; x /= 10000; digit[size++] = tmp; } while(x!=0); } void output() { for(int i=size-1;i>=0;i--) { if(i!=size-1) printf("%04d",digit[i]); else printf("%d",digit[i]); } printf("\n"); } bigInteger operator * (int x) const { bigInteger ret; ret.init(); int carry = 0; for(int i=0;i<size;i++) { int tmp = (digit[i] * x) + carry; carry = tmp / 10000; tmp %= 10000; ret.digit[ret.size++] = tmp; } if(carry != 0) ret.digit[ret.size++] = carry; return ret; } bigInteger operator + (const bigInteger &A) const { bigInteger ret; ret.init(); int carry = 0; for(int i=0;i<size || i<A.size;i++) { int tmp = digit[i] + A.digit[i] + carry; carry = tmp / 10000; tmp %= 10000; ret.digit[ret.size++] = tmp; } if(carry != 0) ret.digit[ret.size++] = carry; return ret; } bigInteger operator / (int x) const { bigInteger ret; ret.init(); int remain=0; for(int i=size-1;i>=0;i--) { int tmp = (digit[i] + remain * 10000) / x; int r = (digit[i] + remain * 10000) % x; remain = r; ret.digit[i] = tmp; } for(int i=0;i<100;i++) if(digit[i]!=0) ret.size = i; ret.size++; return ret; } int operator % (int x) const { int remain = 0; for(int i=size-1;i>=0;i--) { int r = (digit[i] + remain*10000) % x; remain = r; } return remain; }}a,b,c;char str[1000];char ans[1000];int main() { int n,m; while(scanf("%d %d",&m,&n)!=EOF) { scanf("%s",str); a.set(0); b.set(1); int len = strlen(str); for(int i=len-1;i>=0;i--) { int tmp; if(str[i]>='0' && str[i]<='9') tmp = str[i] - '0'; else tmp = str[i] - 'A' + 10; a = a + b * tmp; b = b * m; } int size = 0; do { int r = a % n; if(r>=0 && r<=9) ans[size++] = r + '0'; else ans[size++] = r - 10 + 'a'; a = a / n; }while(a.digit[0]!=0 || a.size!=1); for(int i=size-1;i>=0;i--) printf("%c",ans[i]); printf("\n"); } return 0;}
- 题目1080:进制转换
- 题目1080:进制转换
- 题目1080:进制转换
- 题目1080:进制转换
- 62-题目1080:进制转换
- 题目45:进制转换
- 题目62:进制转换
- 题目1140: 进制转换
- 题目1138:进制转换
- 题目1138:进制转换
- 题目1138:进制转换
- 题目1138:进制转换
- 九度OJ 题目1080:进制转换
- 九度OJ 题目1080:进制转换
- 九度 oj 题目1080:进制转换
- 【九度】题目1080:大数进制转换
- 【九度OJ】题目1080:进制转换 解题报告
- 九度OJ 题目1080:进制转换
- Oracle bbed的使用(跨归档恢复)
- SVN的安装、使用、权限设置详解
- js2dx --- 控件
- Ubuntu 常用操作
- LPTSTR、LPCSTR、LPCTSTR、LPSTR解析
- 题目1080:进制转换
- Ubuntu中root用户和user用户的相互切换
- cocos2d-x 内存管理链接
- 正则表达式的使用及一些符号的意思
- 时间段时间控件
- 经典vim插件功能说明、安装方法和使用方法介绍(已更新)
- IOS 打电话_Email_SMS_Safari
- note : append menu to menu on right click menu
- 黑马程序员--基础学习总结之集合