上善若水

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  2 Posts :: 32 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 10174
  • 排名 - 1166

最新评论

阅读排行榜

评论排行榜

进制转换

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:142            测试通过:59

描述

请你编一程序实现两种不同进制之间的数据转换。

输入

输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

输出

 输出仅一行,包含一个正整数,表示转换之后的m进制数。

样例输入

16
FF
2

样例输出

11111111

题目来源

NUAA

分析:我的思路先转成10进制的,再转换成k进制的输出。中间出现小问题,没考虑输出是10进制以上的情况。
#include<stdio.h>
#include 
<string>
#include 
<stack> 
using namespace std;
int main()
{
    
int n=0,m,i,j,k;
    
char ch[1000],map[]="0123456789ABCDEF";
    stack
<int>s;
    
while(scanf("%d%s%d",&m,ch,&k)!=EOF){
        n
=0;
        
for(i=0;i<strlen(ch);i++)
        {
            
if (ch[i]>64)
            {
                n
=n*m+ch[i]-55;    
            }
            
else
            {
                n
=n*m+ch[i]-48;
            }
        }
        
do
        {
            s.push(n
%k);
            n
/=k;
        }
        
while (n);

        
while (!s.empty())
        {
            printf(
"%c",map[s.top()]);
            s.pop();
        }
        printf(
"\n");
    }
}
posted on 2009-12-10 13:53 上善若水 阅读(342) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理