求解释
#include<stdio.h>
char b[99];
int m=0;
int main()
{
void atob(long n);
long a,c;
scanf("%ld",&a);
c=a;
while(c/10!=0)
{
m++;
c=c/10;
}
atob(a);
puts(b);
return 0;
}
void atob(long n)
{
int i;
if((i=n/10)!=0)
atob(i);
b[m--]=n%10+48;
} 这段实现长整型的倒序字符串输出 如123 则321 看不懂 求解释
[解决办法]
- C/C++ code
#include<stdio.h>char b[99]; //用于存储转换后的数字的字符形式,以123为例,转换后就是b[0] = '3',b[1] = '2',b[2] = '1',int m=0; //用于标记数组b的最大下标,以123为例,因为它的长度为3,所以最大下标是就是2int main(){ void atob(long n); long a,c; scanf("%ld",&a); c=a; //计算b的最大下标,每次除以10,除到个位数的时候就跳出循环了,以123为例,得出m等于2 while(c/10!=0) { m++; c=c/10; } //这是一个递归函数 atob(a); puts(b); return 0;}void atob(long n){ int i; if((i=n/10)!=0) atob(i); //每次递归就除以10,一直递归到最前面一个数,以1、2、3的顺序分别存储在b[2] ,b[1] ,b[0] 中, b[m--]=n%10+48;// %10就是得出个位数, 加48是将数字转换为字符,比如3的字符为'3','3'就等于 3 + 0x30或者3 + 48}
[解决办法]
- C/C++ code
#include<stdio.h>#include<stdlib.h> char b[99]; int m=0;int main(){ void atob(long n); long a,c; scanf("%ld",&a); //输入123 a = 123 c=a; //c = 123 while(c/10!=0){ m++; //统计输入数字的位数m c=c/10; } atob(a); //跟据定义,atob函数起到转换作用 puts(b); system("pause"); return 0;}void atob(long n){ int i; if((i=n/10)!=0) atob(i); //递归 b[m--]=n%10+48; //数字转换成字符输出} /* 递归展开atob(123){ i=12; 12!=0 atob(12){ i=1; 1!=0 atob(1){ b[2]=49; } b[1]=50; } b[0]=51;}*/