| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3383 人关注过本帖
标题:10进制转换2-36进制
只看楼主 加入收藏
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
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
YueWuSS
Rank: 2
等 级:论坛游民
帖 子:15
专家分:96
注 册:2011-10-29
收藏
得分:5 
回复 楼主 随风飘荡
//修改部分已加色
#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-10 + 65;     //A的ASCII为65
     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 04:36
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:0 
-10+65跟+55应该没区别吧
2011-10-29 11:50
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:15 
#include<stdio.h>
int main()
{
    int num, base, i;
    int a[32];
    scanf("%d %d", &num, &base);
    if(num == 0){printf("0\n"); return 0;}
    for(i = 0; num; i++)
    {
        a[i] = num % base;
        num /= base;
    }
    for(i--; i >= 0; i--)
        printf("%c", (a[i] < 10) ? (a[i] + '0') : (a[i] - 10 + 'A'));
    printf("\n");
    return 0;
}


[ 本帖最后由 beyondyf 于 2011-10-29 12:14 编辑 ]

重剑无锋,大巧不工
2011-10-29 12:12
随风飘荡
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.024327 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved