Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12264
  • 博文数量: 8
  • 博客积分: 280
  • 博客等级: 二等列兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-05 22:44
文章分类

全部博文(8)

文章存档

2011年(1)

2009年(7)

我的朋友
最近访客

分类: C/C++

2009-05-07 19:46:02

Problem Description
 
Date:
2009 / 05 / 07
 
练习递推的使用。
 
Problem Analysis
【数制换算的一般方法】
  1. 把r进数转换成十进制数,只要把r进制数写成r的各次幂的和的形式。然后按十进制计算结果。(这里r是大于1的自然数)
    例如: (205.21)8 = 2 × 82 + 0 × 81 + 5 × 80 + 2 × 8-1 + 1 × 8-2
  2. 把十进制换成r进制,可以把十进制化成r的各次幂(各次幂的系数小于r而大于或等于0的整数)的和,从最高次幂起各次幂的系数就是依次的r进制从左到右各个数位上的数字。
  3. 当十进制数是整数时,采用“r除取余”法。即用数r除十进整数。取它的每次余数。
    例如:把(746)10化为一个八进制的数。
    8|746 ---- 8|93 --- 2 --- 8|11 --- 5 --- 8|1 --- 3 -- 0 --- 1
    得到(746)10 = (1352)8

对负数的进制转化要特别注意,具体代码如下:

Codes:

#include
using namespace std;

int digit;

void solve(int num){
    if(num == 0)
        return;
    solve(num/digit);
    printf("%c",num % digit < 10 ? num % digit  + '0': num % digit - 10 + 'A');
}

int main() {
    int num;
    while(cin >> num >> digit) {
        if(num > 0)
        solve(num);
        else if (!num)
        cout << 0;
        else {
        cout << "-";
        solve(-num);
        }
        cout << endl;
    }
    return 0;
}

@ fleap

阅读(955) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-10-29 15:37:27

我想问一下,void solve(int num){ if(num == 0) return; solve(num/digit); 是什么意思