| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1203 人关注过本帖
标题:我是大一新生!请看看题目!不会做的~
只看楼主 加入收藏
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
 问题点数:0 回复次数:15 
我是大一新生!请看看题目!不会做的~
编写并测试以下函数:
void GetCode(int number, int radix);
传入一个十进制的整数,函数将这个数以radix进制输出。
要求在函数中将这个改变进制后的数打印出来,
搜索更多相关主题的帖子: 新生 
2008-11-16 15:28
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
你知不知道从十进制到n进制怎样转换的?
知道的话就用汉语描述一下过程,然后翻译成C语言;
不知道的话就先想办法知道,然后参考前一句。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-16 15:45
changshiop
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2008-11-7
收藏
得分:0 
回复 2# 的帖子
十进制数除以N得到商和余数,然后在用商除以N得到商和余数........知道商为0
我的想法是在此过程中把每个余数按顺序存放在数组中,最后反序输出。但是不会处理。遇到很多数组方面的困难,比如说数组的大小不确定导致我不能定义数组的大小,数组定义成什么类型?由此不好编程。
请把这些帮我写出来看看,谢谢你~
2008-11-16 15:50
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
不知道数组大小,那就定义一个大一些的,大到程序不好意思说不够用。
程序代码:
void GetCode(int number,int radix)
{
    char digit[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //这样最多算到36进制
    char res[100]; //用来保存结果
    int i=0;

    while(number>0)
    {
        res[i++]=digit[number%radix]; //从后往前算出radix进制的一位
        number/=radix; //短除,准备算下一位
    }
    
    while(i>=0)
        putchar(res[--i]); //输出之
}
收到的鲜花
  • changshiop2008-11-16 16:18 送鲜花  2朵   附言:我很赞同
  • changshiop2008-11-16 16:19 送鲜花  3朵   附言:好文章

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-16 16:03
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
TOLS:
1 你试试看负数?你这个程序提交飞燕的“数值转换”的题目,绝对是不会AC的……

2 大小嘛……33绝对是够了的……如果怕不够,可以char res[sizeof(int) * 8 + 1];

下面是飞燕写的一个代码,版权归飞燕所有,仅供参考:
#define P(n) putchar(n < 10 ? n+48 : n+55)
void GetCode(int number, int radix)
{
    int b = number / radix,
            a = (number %= radix) < 0 ? -number : number;
    if (b) GetCode(b, radix), P(a);
    else number < 0 && putchar('-'), P(a);
}
2008-11-16 17:22
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
http://

大家可以把自己写的代码交上去试试看…………反正别看这个函数小,要写好还真是很难……一个难点是对0x80000000的处理(74的就不用问了,压根儿没处理负数),还有一个就是输出格式的控制……
2008-11-16 17:40
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
嗯,我承认我没处理负数
或者说不管我承认不承认,我都没处理负数
但是我没处理负数的理由不是忘记了,而是没有人告诉我表示n进制的负整数的时候是前面带个负号还是把符号位一起转换了。

LS的请你用你认为正确的程序把一个负整数从十进制转换为十进制,也就是radix=10,结果是不是很幽默?题目里面有要求你把十进制数无符号化么?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-16 18:24
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
抱歉,又是我武断了。
那么反过来说,为什么内置的8进制和16进制都无符号化了呢?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-16 18:30
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
#include <stdio.h>

#define P(n) putchar(n < 10 ? n+48 : n+55)

void GetCode(int number, int radix)
{
    int b = number / radix,
            a = (number %= radix) < 0 ? -number : number;
    if (b) GetCode(b, radix), P(a);
    else number < 0 && putchar('-'), P(a);
}

int main()
{
    GetCode(-10, 10);
    putchar('\n');
    return 0;
}

输出-10,有问题么?
2008-11-16 18:33
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1705
专家分:4345
注 册:2007-12-27
收藏
得分:0 
所以在LZ没有明确的要求的情况下我就武断地认为不要求了,我对此表示抱歉。

[[it] 本帖最后由 forever74 于 2008-11-16 18:36 编辑 [/it]]

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2008-11-16 18:34
快速回复:我是大一新生!请看看题目!不会做的~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024098 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved