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 编辑 ]










LS大大好犀利,我被补刀了= =