admin管理员组文章数量:1794759
{超简单} C++ 进制转换实用函数
2022/4/23/18:50更新 vector<int>outNumber; void superChange(int originBase,int goBase,string number){ deque<int>theNumber; for(int i=0;i<number.length();i++){ if(number[i]<='9') theNumber.push_back(int(number[i]-'0')); else if(number[i]<='Z') theNumber.push_back(int(number[i]-'A'+10)); else theNumber.push_back(int(number[i]-'a'+36)); } while(theNumber.size()){ int res=0; for(int i=0;i<theNumber.size();i++){ theNumber[i]+=res*originBase; res=theNumber[i]%goBase; theNumber[i]/=goBase; } outNumber.push_back(res); while(theNumber.size()&&theNumber.front()==0) theNumber.pop_front(); } } void baseout(){ while(outNumber.size()){ if(outNumber.back()<=9) cout<<char(outNumber.back()+'0'); else if(outNumber.back()<=35) cout<<char(outNumber.back()+'A'-10); else cout<<char(outNumber.back()+'a'-36); outNumber.pop_back(); } cout<<endl; }
以下是旧版 一.利其器 1.准备工作
要完成对未知进制数字的存储,我们可以使用数组,并附带一个变量用来存储该数的位数。
char numberstring[100];int wei=0;在每次使用后要注意初始化
memset(numberstring,0,sizeof(numberstring)); 2.归一处理我们先把输入的数字统一转化成十进制,以便以后转化为其它进制。
//base:进制 number:输入的数字 int totenint(int base,string number){ int t=0; for(int i=0;i<number.length();i++){ if(number[i]>='0'&&number[i]<='9')t+=number[i]-'0'; else t+=number[i]-'A'+10; if(i!=number.length()-1){ t*=base; } } return t; } 3.转换 //此函数倒序存储数字 //此函数支持负数进制,如-2进制:1、-2、4、-8、16... void tostring(int base,int n){ if(base<0){int i; for(i=0;n!=0;++i){ numberstring[i]=abs(n%base); n-=numberstring[i]; n/=base; }if(i)wei=i-1; } else{int i; for(i=0;n!=0;++i){ numberstring[i]=n%base; n/=base; }if(i)wei=i-1; } } 4.输出 void baseout(){ for(int i=wei;i>=0;i--){ if(numberstring[i]>=0&&numberstring[i]<=9) cout<<char(numberstring[i]+'0'); else cout<<char(numberstring[i]+'A'-10); } cout<<endl; } 二.善其事计算器设计
Really Neato计算器公司最近邀请你的团队为他们设计一款超级Neato一代计算器。作为计算机科学家,你建议该计算器能够在各种进制之间进行转换。他们认为这是一个很好的想法,并要求你的团队先给出实现进制转换的算法原型。公司经理告诉你,该计算器应该具有以下一些特征: (1)可以显示7位; (2)按键除了数字0到9外,还包括大写字母A到F; (3)支持2~16进制。
输入格式:输入文件中的每行为一个进制转换,包括3个数,第1个数是原进制下的一个整数,第2个数就是原进制,第3个数是转换后的进制。这3个数的两边可能有一个或多个空格。输入数据一直到文件结尾。
输出格式:实现所有的进制转换,转换后的数右对齐到7位显示。如果转换后的数的位数太多,超过7位,则输出“ERROR”,也是右对齐到。
输入样例: 1111000 2 10 1111000 2 16 2102101 3 10 2102101 3 15 12312 4 2 1A 15 2 1234567 10 16 ABCD 16 15 输出样例: 120 78 1765 7CA ERROR 11001 12D687 D071 //【注意】这是NENU课堂作业的代码,如果想交作业,请自己重写一遍. int main(){ int tennumber,originbase,gobase; string number; while(cin>>number>>originbase>>gobase){ memset(numberstring,0,sizeof(numberstring)); tennumber=totenint(originbase,number); tostring(gobase,tennumber); if(wei>=7) cout<<" "<<"ERROR"<<endl; else{ for(int i=0;i<6-wei;i++)cout<<" "; baseout(); } } return 0; }版权声明:本文标题:{超简单} C++ 进制转换实用函数 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686579463a83994.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论