1 #include <stdio.h> 2 3 void intToString(int N,char arr[]){ 4 //仅支持有符号4字节的int类型,范围-2147483648 - 2147483647 5 int i,j,flag; 6 char stack[10]; //栈,int的最值最多10位 7 i=0; //计数器 8 if (N<0){ 9 flag=0; //N是负数 10 N=-N; 11 //把N转为正数,注意,如果N是-2147483648,那么N=-N的结果还是-2147483648 12 //因为-N表达式将-2147483648转为2147483648,而2147483648对于4字节int来说是溢出的,这个溢出的数又变成了-2147483648 13 //这时,程序会计算异常 14 //解决方法,可以在函数开始时加个if语句,将这个值排除或当作特例 15 }else{ 16 flag=1; //N是正数 17 } 18 while (N/10!=0){//说明N还不是一位数,继续拆 19 stack[i]=(char)(48+N%10); //字符的1 - 数字的1 = 48,N%10获取N的个位数,并把转换后的字符入栈 20 N=N/10; 21 i++; 22 } 23 stack[i]=(char)(48+N); //当循环结束,N必定是一个一位数 24 if (flag==0){//如果N是负数,需要在字符串最前面加负号 25 arr[0]=‘-‘; 26 for (j=i;j>-1;j--){//将栈中的字符出栈,j=i+1是因为数组arr的0元素已经保存负号了 27 arr[i-j+1]=stack[j]; 28 } 29 arr[i+2]=‘\0‘; //添加字符串结束标志 30 }else{ 31 for (j=i;j>-1;j--){//将栈中的字符出栈 32 arr[i-j]=stack[j]; 33 } 34 arr[i+1]=‘\0‘; 35 } 36 } 37 38 int main(){ 39 char myarr[15]; 40 /* 测试 */ 41 intToString(15,myarr); 42 printf("%s\n",myarr); 43 intToString(-90,myarr); 44 printf("%s\n",myarr); 45 intToString(2147483647,myarr); 46 printf("%s\n",myarr); 47 intToString(-2147483647,myarr); 48 printf("%s\n",myarr); 49 intToString(0,myarr); 50 printf("%s\n",myarr); 51 return 0; 52 }
运行截图:
原文:https://www.cnblogs.com/ryzz/p/12275236.html