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 }
運行截圖:數組