| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3383 人关注过本帖
标题:10进制转换2-36进制
取消只看楼主 加入收藏
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
10进制转换2-36进制
    加上注释了,其实比较悲剧的是,到最后我想找一下有没有更好的整数转字符串的方法,然后搜索到了itoa....然后我就崩溃了
里面还有很多调试用的printf没删,其实过程中遇到很多哭笑不得的错误,刚开始是我先除了而不是先求余,然后测试的时候输入了10 2 output函数输出0101, 用printf得知从num函数返回之后save是1010.我还以为不应该倒序输出,但是输入其他的又不对,然后被自己误导了半天,笔算了半天,才发现我是先除了.
PS:新手练手.
另外求个新手学习群...
再问下各位大大有没有更好的思路

明天试试n转n看看
程序代码:
#include <stdio.h>
#include <stdlib.h>

void num(int ,int ,char * ,int * );
void savenum(char * , int , int * );
void output(char * , int );

int main(void)
{
    char save[16]={0};  /*初始化*/
    int inputnum,jz;
    int use = 0;        /*记录数组使用位置*/

    printf("请输入需要转换的数字");
    scanf("%d",&inputnum);
    printf("请输入需要转换的进制(2-36):");
    scanf("%d", &jz);   

    while (36 < jz || 2 > jz)     /*检测是否超出上限*/
    {
        printf("超出限制,请重新输入\n");
        scanf("%d", &jz);
    }
    num(inputnum,jz,save,&use);
    output(save,16);

//    itoa(inputnum,save,jz);
//    printf("%s",save);

    return 0;
}

void num(int input,int injz,char * temp,int * use)
{
    int tempmod;
//    printf("进入num函数,input = %d, injz = %d, temp = %s, use = %d\n",input ,injz ,temp ,*use );
    while(1)                     /*无限循环*/
    {
        tempmod = input % injz;  /*先求余,否则会丢失一位数*/
        input = input / injz;
        savenum(temp,tempmod,use);
//        printf("已从savenum函数返回\n");
        if (input == 0)          /*检测输入的数字是否已除至0,是则退出循环*/
            break;
        else ;
           

    }

    return ;
}

void savenum(char * temp , int t, int * use)
{
    if (10 > t)            /*如果t小于10则加48,对应ASCII中0-9的编码*/
        t = t + 48;
    else                   /*否则则加55,对应ASCII中A-Z的编码*/
        t = t + 55;
    temp[* use] = t;       /*赋值*/
    * use = * use + 1;     /*使main中的use变量加1,已避免操作了已经赋值的字符数组空间*/
    return ;
}

void output(char * temp , int t)
{
    int i;                 

    t = t - 1;              /*因为数组下标从0开始,所以减一,使上面输入更方便*/
//    printf("进入output函数,接收到的数据为 temp = %s,t = %d\n", temp , t);

    for(i=t;i>=0;--i)       /*倒序输出*/
    {
//        printf("第[%d]次\n", i);
        if (temp[i] != 0)   /*只输出非空字符*/
            printf("%c", temp[i]);
    }
    printf("\n");         

    return ;
}



[ 本帖最后由 随风飘荡 于 2011-10-29 02:07 编辑 ]
搜索更多相关主题的帖子: color 字符串 搜索 测试 
2011-10-29 01:38
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
-10+65跟+55应该没区别吧
2011-10-29 11:50
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
LS大大好犀利,我被补刀了= =
2011-10-29 14:14
快速回复:10进制转换2-36进制
数据加载中...
 
   



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

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