进制转换

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 49640    Accepted Submission(s): 27279


Problem Description
输入一个十进制数N,将它转换成R进制数输出。
 

 

Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
 

 

Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
 

 

Sample Input
7 2 23 12 -4 3
 

 

Sample Output
111 1B -11
 
感觉没什么好说的,就是先取余再除进制,然后注意复数的情况。一次就能过。
代码奉上:
#include <iostream>
#include<math.h>
#include <iomanip>
#include<cstdio>
#include<string>
#include<map>
#include<vector>
#include<list>
#include<algorithm>
#include<stdlib.h>
#include<iterator>
#include<sstream>
#include<string.h>
using namespace std;


int main()
{
    int m,n;//m->number n->jinzhi
    while(cin>>m>>n)
    {
        char a[100]={" "};
        int cnt=0;//记录有几位数
        int temp=0;
        int num=0;
        if(m>=0)
        {
             while(m>0)
        {
            temp=m%n;
            if(temp<10)
            {
                a[cnt]=temp+48;
                cnt++;
            }
            else
            {
                a[cnt]=temp+55;
                cnt++;
            }
            m=m/n;
        }
        for(int i=cnt-1;i>=0;i--)
        {
            if(i!=0)
            {
                cout<<a[i];
            }
            else
            {
                cout<<a[i]<<endl;
            }

        }

        }
        else
        {
             m=-m;
             while(m>0)
        {
            temp=m%n;
            if(temp<10)
            {
                a[cnt]=temp+48;
                cnt++;
            }
            else
            {
                a[cnt]=temp+55;
                cnt++;
            }
            m=m/n;
        }
        cout<<"-";
        for(int i=cnt-1;i>=0;i--)
        {

            if(i!=0)
            {
                cout<<a[i];
            }
            else
            {
                cout<<a[i]<<endl;
            }

        }

        }

    }

    return 0;
}