天天看點

取無符号短整型數中的奇數位、偶數位組成新的數字

這道題不難,才開始沒看明白,還以為是取二進制的形式,後來搞明白,這道題主要學會兩點

  • 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);
}
           

繼續閱讀