杭电ACM 2031: 进制转换

原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45814969

这里写图片描述

这一道题简单题,只要掌握十进制怎么和16进制,八进制转换的方法,就能很好的模拟其他进制的转换。在这里用到了一个翻转函数reverse ( s.begin(), s.end () ); 反向排序函数,即字符串反转函数。注意他的头文件是:

#include <algorithm>

代码很简单。AC代码如下:

#include <iostream>
#include<string>
#include<algorithm>
using namespace std;

int main(void)
{
    int n,r,symbol=1;
    string int_binary;

    while(cin>>n>>r)
    {
        //如果是负数则记下符号。把输入的数变为正
        if(n<0)
        {
            symbol=-1;
            n=-n;
        }
        //当r>10的时候和16进制的类似
        if(r>10)
        {
            while(n!=0)
            {
                //将大于10的变为字母,加入到字符串中
                if(n%r>=10)
                    int_binary+=((n%r)-10)+'A';
                else//小于10则直接转为字符
                    int_binary+=(n%r)+'0';

                n/=r;//修改n
            }
        }
        else//r<10的时候直接转为字符
        {
            while(n!=0)
            {
                int_binary+=(n%r)+'0';
                n/=r;
            }
        }
        //注意:最后所生成的字符串和最后输出的字符串刚好是相反的,所以这里需要翻转
        reverse(int_binary.begin(),int_binary.end());
        //符号不同时候的输出
        if(symbol==-1)
            cout <<"-"<<int_binary<< endl;
        else
            cout<<int_binary<<endl;
       //必须做字符串清空处理,方便进入下一个循环,符号也重新初始化
        int_binary.clear();
        symbol=1;
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值