题目要求是将一个整数N转换成字符串,例如,输入483..应该输出"483", N的位数不确定,可以是任意位数的整数....仅希望大家指出我这个程序中的错误...不需要其它的实现方法....谢谢...程序中的注释是我的思路
void fun(long a , char *p) /*将整数转换成字符串的函数,转换后反序存入字符数组p*/
{
if(a<10) /*判断a是否为一位数,要是直接送到*p中*/
*p=a+'0'; /*把数字转换成字符*/
else /*不是一位数的情况*/
{
*(p++)=a%10+'0'; /*把a个位数字转换成字符存入*p,并使p指向字符数组下一个*/
fun(a/10,p); /*递归调用,a/10就可以把刚才已经存过的个位去掉*/
}
*p='\0'; /*给字符数组最后加上一个结束标志*/
}
void main()
{long a;
char p[10],temp;
int i;
scanf("%ld",&a); /*输入整数*/
fun(a,p); /*函数调用*/
for(i=0;i<=strlen(p)/2;i++) /*由于函数是反序存储,这里进行倒序*/
{temp=p[i];
p[i]=p[strlen(p)-i];
p[strlen(p)-i]=temp;
}
puts(p); /*输出转换过的字符数组*/
getch();
}
----------------解决方案--------------------------------------------------------
我看了你的程序,发现了你的错误,如下:
1〉 *p='\0'; /*给字符数组最后加上一个结束标志*/
这句应该放在 if 条件后面,你想想是不是 ?
2〉 for(i=0;i<=strlen(p)/2;i++) /*由于函数是反序存储,这里进行倒序*/
{temp=p[i];
p[i]=p[strlen(p)-i];
p[strlen(p)-i]=temp;
}
这个算法写错了,不信的话你在 for 前面加一个puts看看(先把 1 错误改正后)
----------------解决方案--------------------------------------------------------
谢谢楼上的....经过更改...程序如下
void fun(long a , char p[])
{
if(a<10)
{*p=a+'0';
*++p='\0';
}
else
{
*(p++)=a%10+'0';
fun(a/10,p);
}
}
void main()
{long a;
char p[10],temp;
int i;
scanf("%ld",&a);
fun(a,p);
for(i=0;i<=strlen(p)/2-1;i++)
{temp=p[i];
p[i]=p[strlen(p)-i-1];
p[strlen(p)-i-1]=temp;
}
puts(p);
getch();
}
[此贴子已经被作者于2006-11-12 0:01:16编辑过]
----------------解决方案--------------------------------------------------------
终于想通了为什么*++p='\0';不能放在函数最后的那个位置了....因为递归每次都会执行...这样在倒数第二次递归的时候就给*p后面加上了个\0...这样在输出在时候遇到这个\0就会停止...尽管后面还有字符....
呵呵....谢谢二楼....
那个数组字符交换错误由于大意造成....发现了
[此贴子已经被作者于2006-11-11 23:38:51编辑过]
----------------解决方案--------------------------------------------------------
不客气 。。。
----------------解决方案--------------------------------------------------------