从零起步看算法(第八天 4.13)
//q10 进制转换
1.本题不知道为什么在DEv中可以通过,在网页一直ac不了
2.本题的知识点 进制转换
https://blog.csdn.net/wangjunchengno2/article/details/78690248
3.本题的老师提了一个建议,了解一下sprintf()
可以转换16进制和8进制
https://blog.csdn.net/u011317840/article/details/47808235
4.用栈结构,vector可解决
ac代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
int a,b;
int f=0;
cin>>a>>b;
if(a<0)f=1;
vector <int> ans;
for(;;)
{
ans.push_back(a%b);
a=a/b;
if(a==0)break;
}
if(f==1)cout<<"-";
vector<int> ::iterator it;
for(it=ans.end()-1;it!=ans.begin()-1;it--)
{
int x=abs(*it);
switch (x)
{
case 10 :cout<<"A";break;
case 11 :cout<<"B";break;
case 12 :cout<<"C";break;
case 13 :cout<<"D";break;
case 14 :cout<<"E";break;
case 15 :cout<<"F";break;
default :cout<<x;break;
}
}
return 0;
}
5.itoa(num,str,d);转换的数据类型为char
#include<cstdlib>
#include<cstdio>
#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream>
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;
char z[25+5];
void fun(int x,int y){
//它的功能是将一个10进制的数转化为n进制的值、其返回值为char型。
memset(z,-1,sizeof(z));
itoa(x,z,y);
for(int i=0;i<30;i++){
if(z[i]=='b')z[i]='B';
if(z[i]=='a')z[i]='A';
if(z[i]=='c')z[i]='C';
if(z[i]=='d')z[i]='D';
if(z[i]=='e')z[i]='E';
if(z[i]=='f')z[i]='F';
if(z[i]=='-1')break;
}
cout<<z<<endl;//字符数组的输出
}
using namespace std;
int main(){
int N,R;
while(cin>>N>>R){
assert(N<=10000);
assert(R>=2&&R<=16);
fun(N,R);
}
return 0;