算法笔记3.5进制转换(难)

onlinejudge          支付宝扫一扫天天领红包!

问题 B: 数制转换

时间限制: 1 Sec  内存限制: 32 MB
提交: 609  解决: 164
[提交][状态][讨论版][命题人:外部导入]

题目描述

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入

<span style="color:#333333">4 123 10</span>

样例输出

<span style="color:#333333">27</span>

提示

代码

#include <iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
class student{
public:    char xuehao[100];
    char name[100];
    char sex[1000];
    int age;
};
using namespace std;
int f(int n){
  int result;
  if(n==1||n==2)
    {
        result=1;
     return result;
    }
  else
  result=f(n-1)+f(n-2);

  return result;
}
void reverse1(char s[],char s1[]){
      int i=0;
      int j=0;
      for(;s[i]!='\0';i++)
         if((s[i]=='a')||(s[i]=='o')||(s[i]=='e')||(s[i]=='i')||(s[i]=='u')){
            s1[j]=s[i];
            j++;
         }

}

int main()
{long a,b;
char n[100];
char c[100000];
while(cin>>a>>n>>b){
memset(c,'0',sizeof(c));

long long sum=0;
for(int i=0;n[i]!='\0';i++){
        if(n[i] >= 'a')
           n[i] -= 32;
            int tmp = (n[i] >= 'A' ? n[i]-'A'+10:n[i]-'0');
           sum=sum*a+tmp;

    /*if(n[i]>='A')
        sum=sum*a+(n[i]-55);
    else
        sum=sum*a+(n[i]-'0');*/}

int k=0;
do{
    if(sum%b<=9)
        c[k] = sum%b+'0';
    else
        c[k] = sum%b-10+'A';
    sum=sum/b;
    k++;
}while(sum!=0);
for(int i=k-1;i>=0;i--)
    cout<<c[i];
cout<<endl;
}

}
//


 

用字符串存储和表示不同进制的数。

猜你喜欢

转载自blog.csdn.net/qq_16725749/article/details/81211311
今日推荐