| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 334 人关注过本帖
标题:新手请教,自制进制转换函数
只看楼主 加入收藏
蜘蛛
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
新手请教,自制进制转换函数
请教下面的程序错误在哪里,谢谢
程序代码:
#include<stdio.h>
void transfer(int m,int k)
{
    int a[20],i;
    for(i=0;m;i++)
        {
            a[i]=a%k;   /*感觉问题出在这里*/
            m/=k;
        }
    for(;i>=0;i--)
        printf("%d",a[i]);
}
void main()
{
    int b,n;
    scanf("%d%d",&b,&n);
    transfer(n,b);
}

搜索更多相关主题的帖子: 程序错误 color 
2011-06-22 20:46
蜘蛛
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-29
收藏
得分:0 
输入一个数十进制数m,和要转换的进制b
但是运行总是出错
2011-06-22 20:48
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
a[i] = m % k;                 // 问题就在这里
for (i--; i >= 0; i--)        // 还有这里


还有,楼主应该加上对进制的检查,确定 1 < k <= 10

[ 本帖最后由 voidx 于 2011-6-22 20:53 编辑 ]
2011-06-22 20:51
蜘蛛
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-29
收藏
得分:0 
  按LS的是对的
但是 for(i--;i>=0;i--)中的第一个   i--;  还是有点不明白
2011-06-22 20:58
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:20 
你自己算算看 transfer(10, 2) 在第一个 for 执行结束后 i 的值。
然后再想一想
2011-06-22 21:01
蜘蛛
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2011-4-29
收藏
得分:0 
呵呵,谢谢
慢慢理解了
2011-06-22 21:08
a9580643
Rank: 2
来 自:江西九江
等 级:论坛游民
帖 子:60
专家分:59
注 册:2011-4-21
收藏
得分:0 
你for循环的条件呢?
for(i=0;i<20;i++)

花有重开日,人无在少年。
2011-06-23 06:48
z843137202
Rank: 1
等 级:新手上路
帖 子:19
专家分:9
注 册:2011-6-12
收藏
得分:0 
好像没明白
2011-06-23 07:15
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
楼主已经理解了,上面两位继续努力
2011-06-23 11:28
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>

char * dec_to_x_string(int, int);
int get_digits(int, int);

int main(void) {
    int dec, x;
    scanf("%d%d", &dec, &x);
    char * str = dec_to_x_string(dec, x);
    printf("%s\n", str);
    free(str);
    return 0;
}

char * dec_to_x_string(int dec, int x) {
    if(x < 2 || x > 36) {
        printf("UnsupportedOperation\n");
        return NULL;
    }
    int digits = get_digits(dec, x), ch;
    char * str = (char *)malloc(sizeof(char) * digits + 1);
    str[digits] = '\0';
    while(dec) {
        ch = dec % x;
        if(ch > 9)
            ch = ch - 10 + 65;
        else
            ch += 48;
        str[--digits] = (char)ch;
        dec /= x;
    }
    return str;
}

int get_digits(int dec, int x) {
    int digits = 0;
    while(dec) {
        dec /= x;
        digits++;
    }
    return digits;
}

My life is brilliant
2011-06-23 11:40
快速回复:新手请教,自制进制转换函数
数据加载中...
 
   



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

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