ACM学习历程22——进制转换
2016-08-28 21:50
363 查看
一、十进制转N进制
输入:输入两个字符串,字符串为20进制,把两个字符串相加
输出:输出相加后的和的20进制串
/* 函数功能:十进制数转换成N进制数 */ #include<iostream> #include<string> #include<algorithm> using namespace std; //将十进制data转换成N进制 string TransToN(int data,int n) { string result=""; int index=0,i,j,temp[64]; if(data==0) { result="0"; } else { do { temp[index++]=data%n; data=data/n; } while(data!=0); for(--index;index>=0;index--) { if(temp[index]<10) result.append(1,temp[index]+'0'); else result.append(1,temp[index]+'A'-10); } } return result; } int main() { int data,n; while(cin>>data>>n) { string result=TransToN(data,n); cout<<"result= "<<result<<endl; } return 0; }二、N进制转十进制
/* 函数功能:N进制数转换成十进制数 */ #include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; //将N进制转成十进制 int TransFromN(string data,int n) { int i,y,j,a[50],result=0; int length=data.length(); for(i=0;i<length;i++) { if(data[i]>='0' && data[i]<='9') a[i]=data[i]-'0'; else a[i]=toupper(data[i])-'A'+10; } int power=0; for(i=length-1;i>=0;i--) { y=1; for(j=1;j<=power;j++) y=y*n; power++; result+=y*a[i]; } return result; } int main() { string data; int n; while(cin>>data>>n) { int result=TransFromN(data,n); cout<<"result= "<<result<<endl; } return 0; }以上是两种比较常用的进制转换,不管怎么说进制转换的思想大多一样,涉及到求余、相除、字符与数字的转换等步骤,当然有时候题目不会单纯进行进制间的转换,还涉及到运算操作,下面给出火星加法的一个大数相加的例子。
输入:输入两个字符串,字符串为20进制,把两个字符串相加
输出:输出相加后的和的20进制串
#include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <map> using namespace std; const int N = 109; char arr1 ; char arr2 ; int max(int a, int b) { if(a>b) return a; return b; } char con(int a) { if(a>=0 && a<=9) return a+'0'; switch(a) { case 10: { return 'a'; break; } case 11: { return 'b'; break; } case 12: { return 'c'; break; } case 13: { return 'd'; break; } case 14: { return 'e'; break; } case 15: { return 'f'; break; } case 16: { return 'g'; break; } case 17: { return 'h'; break; } case 18: { return 'i'; break; } case 19: { return 'j'; break; } } } int main() { map<char, int> mp; mp['0'] = 0; mp['a'] = 10; mp['1'] = 1; mp['b'] = 11; mp['2'] = 2; mp['c'] = 12; mp['3'] = 3; mp['d'] = 13; mp['4'] = 4; mp['e'] = 14; mp['5'] = 5; mp['f'] = 15; mp['6'] = 6; mp['g'] = 16; mp['7'] = 7; mp['h'] = 17; mp['8'] = 8; mp['i'] = 18; mp['9'] = 9; mp['j'] = 19; while(true) { memset(arr1, 0, sizeof(arr1)); memset(arr2, 0, sizeof(arr2)); if(!(cin>>arr1>>arr2)) break; int len1 = strlen(arr1); int len2 = strlen(arr2); reverse(arr1, arr1+len1); reverse(arr2, arr2+len2); int len = max(len1, len2)+5; int temp = 0; for(int i = 0; i<len; ++i) { int sum = mp[arr1[i]]+mp[arr2[i]]+temp; temp = sum/20; int a = sum%20; arr1[i] = con(a); } i = len-1; while(!arr1[i] || arr1[i]=='0') { i--; } for(; i>=0; --i) { cout<<arr1[i]; } cout<<endl; } return 0; }
相关文章推荐
- ACM学习历程—HDU 5012 Dice(ACM西安网赛)(bfs)
- ACM学习历程—FZU2148 Moon Game(计算几何)
- ACM学习历程——POJ 2376 Cleaning Shifts(贪心)
- ACM学习历程——UVA11111 Generalized Matrioshkas(栈)
- ACM学习历程——UVA442 Matrix Chain Multiplication(栈)
- ACM学习历程—HDU 5023 A Corrupt Mayor's Performance Art(广州赛区网赛)(线段树)
- ACM学习历程——POJ1260 Pearls(动态规划)
- ACM学习历程——POJ3295 Tautology(搜索,二叉树)
- ACM学习历程—HDU2222 Keywords Search(字典树)
- ACM学习历程——UVA540 Team Queue(队列,map:Hash)
- ACM学习历程—HDU4969 Just a Joke(物理题)
- ACM学习历程——HDU4814 Golden Radio Base(数学递推) (12年成都区域赛)
- ACM学习历程——HDU4472 Count(数学递推) (12年长春区域赛)
- ACM学习历程——HDU1331 Function Run Fun(锻炼多维dp的打表)
- ACM学习历程—HDU1028 Ignatius and the Princess(组合数学)
- ACM学习历程—Rotate(HDU 2014 Anshan网赛)(几何)
- ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)
- ACM学习历程——HDU5017 Ellipsoid(模拟退火)(2014西安网赛K题)
- ACM学习历程——UVA127 "Accordian" Patience(栈, 链表)
- ACM学习历程——UVA10112 Myacm Triangles(计算几何,多边形与点的包含关系)