程序如下,有不懂或者错误评论区留言,谢谢!
#include<stdio.h>
#include<math.h>
#define N 10
int main(){
int tran(int,int);
int x,i=1,j=0;
char num[N]={'\0'}; //定义字符数组并置空
puts("输入一个数:");
scanf("%d",&x); //接收一个数
puts("转化为字符串为:");
if(x<1e-6){ //判断是否为负数
x=-x; //若为负数,取其相反数
num[j++]='-'; //使第一个元素为'-'
}
/*调用函数并将其转化为字符串存入字符数组中*/
for(i=tran(x,i),x=x*10;i>0;i--,j++)
num[j]=((int)(x/pow(10,i)))%10+'0';//将整除结果转化为int型用于取余计算,加上字符0的ASCII码值赋给该元素;
puts(num); //输出字符串
return 0;
}
int tran(int a,int i){
a=a/10; //取余后赋值给自己
if(a!=0)tran(a,++i); //如果取余后不为零则继续递归
else return(i); //返回递归次数(即该数位数)
}
如果不是用递归,程如下:
#include<stdio.h>
#include<math.h>
#define N 10
int main(){
int tran(int,int);
int x,i=1,j=0;
char num[N]={'\0'}; //定义字符数组并置空
puts("输入一个数:");
scanf("%d",&x); //接收一个数
puts("转化为字符串为:");
if(x<1e-6){ //判断是否为负数
x=-x; //若为负数,取其相反数
num[j++]='-'; //使第一个元素为'-'
}
/*调用函数并将其转化为字符串存入字符数组中*/
for(i=tran(x,i),x=x*10;i>0;i--,j++)
num[j]=((int)(x/pow(10,i)))%10+'0';//将整除结果转化为int型用于取余计算,加上字符0的ASCII码值赋给该元素;
puts(num);//输出字符串
return 0;
}
/*-计算输入数字的位数-*/
int tran(int a,int i){
for(i=0;a>0;i++){
a=a/10; //取余后给自身,直到a小于0
}
return(i); //返回循环次数+1(即该数位数)
}