OJ_1080 进制转换

来源:互联网 发布:怎么查看电脑的端口 编辑:程序博客网 时间:2024/06/03 12:28
#include <iostream>#include <vector>using namespace std;void stringToInt(string s,vector<int> &ve){     for(int i=0;i<s.size();i++)     {             int k=0;             if(s[i]>='A')             {                   k=s[i]-'A'+10;                                       }else             {                  k=s[i]-'0';             }             ve.push_back(k);     }}void change(vector<int> ve,vector<int> &result,int m,int n){    int i=0;     while(i<ve.size())// 当该数除为0时,即全部为0     {          int r=0;// 每次的余数                              for(int j=i;j<ve.size();j++)          {                  int t=m*r+ve[j];// 上一位的余数+该位上的数字                  int div=t/n;// n进制                  ve[j]=div;//  保存该位除法的商                   r=t%n;//  该位的余数           }           // 一次除法计算完毕后          result.push_back(r);// 将该次取余值保存           while(ve[i]==0)i++;// 把前置0略去,全部为0时i增加到ve.size()即跳出循环     } }void output(vector<int> v){          for(int i=v.size()-1;i>=0;i--)     {                          if(v[i]>=10)             {                         char c=v[i]-10+'a';// 输出为小写                          cout<<c;             }else                     cout<<v[i];     }     cout<<endl; }void func(){     int m,n;     while(cin>>m>>n)     {                     string s;                     cin>>s;                                         vector<int> ve;                     stringToInt(s,ve);                     vector<int> result;                     change(ve,result,m,n);                     output(result);                          }     }int main(int argc, char *argv[]){    //printf("Hello, world\n");func();return 0;}

除模取余

题目描述:

将M进制的数X转换为N进制的数输出。

输入:

输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出:

输出X的N进制表示的数。

样例输入:
16 10F
样例输出:
15
提示:

输入时字母部分为大写,输出时为小写,并且有大数据。


0 0
原创粉丝点击