這道題不難,才開始沒看明白,還以為是取二進制的形式,後來搞明白,這道題主要學會兩點
- itoa(n,a,10) n為整數int型,a為字元串名,10轉換所基于的進制類型,還有字元串轉換進制類型 atoi n=atoi(a)
- 怎麼在函數中實作多參數傳回呢?在這個題中應用了,之前是數組實作,return隻能傳回一個,現在可以在主函數設定指針,然後為指針配置設定空間,然後作為函數形參,在函數中進行*p=n指派就實作了 才開始有一點不能了解,後來有點明白了,我是這麼了解的,如果隻定義指針,不配置設定記憶體,在函數中指派時,那時候,其實,p沒有進行初始化,p存的位址是多少呢,還沒有初始化,就直接讓位址存數, 而需要對指針開辟空間,類似在建立連結清單時,建立指針,然後動态配置設定記憶體,你才有了存資料,存next指針的地方
這些小細節好多都還不清楚,應用不清楚,以後多注意
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void split(unsigned short n,unsigned short *podd,unsigned short *peven){
char s[20],even[20],odd[20];
itoa(n,s,10);
int i,j=0,k=0;
for(i=0;i<strlen(s);i++){
if(i%2==0) odd[j++]=s[i];
else even[k++]=s[i];
}
odd[j]='\0';
even[k]='\0';
*peven=atoi(even);
*podd=atoi(odd);
}
void easy(unsigned short n,unsigned short *podd,unsigned short *peven){
int i,j,s=n,a[20],even=0,odd=0;
for(i=0;s!=0;i++){
a[i]=s%10;
s=s/10;
}
for(i=i-1,j=0;i>=0;i--,j++){
if(j%2==0) odd=odd*10+a[i];
else even=even*10+a[i];
}
*podd=odd;
*peven=even;
}
int main(){
unsigned short n=12345;
unsigned short *podd=(unsigned short*)malloc(sizeof(unsigned short));
unsigned short *peven=(unsigned short*)malloc(sizeof(unsigned short));
easy(n,podd,peven);
printf("%d %d",*podd,*peven);
}