1、- else if(*(str+i)Z else strcpy(str,error!); break; puts(str); return 0;/1000以内的水仙花数#include #define LEN 1000int main() int i,j,k; int num; int factorLEN/2; for(i=2;LEN; num=i; k=0; for(j=1;jint isprime(const int num); int num1,num2; int temp,i;%d%d,&num1,&num2); if (num1num2) temp=num1; num1=num2;
2、num2=num1; for(i=num1+1;num2; if(isprime(i)%d ,i); printf(int isprime(const int num) /判断是否为素数 int i; if (num#define MAXLEN 200 char str1MAXLEN; char str2MAXLEN= int i=0,j=0; int n=1; int len=strlen(str1); gets(str1); if(len) while(*(str1+i+1) if(*(str1+i)=*(str1+i+1) +n; else *(str2+j)=*(str1+i); *(
3、str2+j+1)=(char)(n+0 j+=2; n=1; +i; *(str2+j)=*(str1+i); *(str2+j+1)=(char)(n+n%sn,str2);/普通字符串逆序char* reverse(char *str); /注意字符串常量和字符串变量是不同的 char *str1=1234235 char str100; strcpy(str,str1); puts(reverse(str);char* reverse(char *str) int i=0,j=0,ss=0; char temp; ss=strlen(str); for(i=0,j=ss-1;ji;+i
4、,-j) temp=stri; stri=strj; strj=temp; return str;/递归实现字符串逆序void reverse(char *str, int left, int right);,*str2=325334 reverse(str,0,strlen(str)-1);void reverse(char *str, int left, int right) if(left=right) return; char t=strleft; strleft=strright; strright=t; reverse(str, left+1, right-1);谭浩强 6.13
5、扩展为高精度加法#define MAXLEN 2000#define LIMIT 9void add(const char *str1, const char *str2, char *result);void num2str(const long int num, char *str); int a,n; long int sum=0,t=0; char resultMAXLEN; char numstrMAXLEN; char numMAXLEN;a,&n); if(a=0 | n=0) strcpy(result,0 else if(nLIMIT)n; t=t*10+a; sum+=t;
6、MAXLEN-1)LIMIT-1; num2str(sum,numstr); strcpy(result,numstr); for(i=LIMIT;=n; for(j=0; numj=(char)(a+ numj=0 add(num,numstr,result); strcpy(numstr,result);strlen(result); /字符串逆序 resulti=numstrstrlen(result)-i-1; resulti= else puts(errornputs(result);void add(const char *str1, const char *str2, char
7、*result) /大数加法 char strMAXLEN; strcpy(str,str2); for(i=strlen(str);strlen(str1); stri= stri= resulti= resulti=(char)(resulti+stri+str1i-2*)%10+ resulti+1=(char)(resulti+stri+str1i-2*)/10+ if(resulti! resulti+1= while(resulti= resulti= -i;void num2str(const long int num, char *str) /数字转化为字符串 long int
8、 num1=num; while(num1!=0) stri=(char)(num1%10+ num1/=10; +i;/高精度加减法,考虑字符串加减法要设计0,太麻烦了,转为数组#define MAXLEN 500 unsigned int i=0,j=0; /函数声明 int maxlength(const char *a,const char *b); void add (const char *num1, const char *num2, char *result); void print(const char *result); int ispositive(const char
9、*str1,const char *str2); char stringaMAXLEN,stringbMAXLEN,stringcMAXLEN+1=/注意赋初值 gets(stringa);/输入a gets(stringb);/输入bstrlen(stringa); if (*stringa!) & (*stringa=0) | (*stringa= (*(stringa+1)=0)error,input a again: gets(stringa); i=0; else if(*stringa!(*(stringa+i)9)|(*stringa=(i=1)&)strlen(stringb)
10、; if (*stringb! (*stringb=0) | (*stringb= (*(stringb+1)=0) gets(stringb); else if(*stringb!(*(stringb+i) )|(*stringb= ) add (stringa, stringb, stringc); print(stringc);void add (const char *num1, const char *num2, char *result) int intaMAXLEN=0,intbMAXLEN=0,intcMAXLEN+1=0; int flagMAXLEN+1=0; char *
11、str1=num1,*str2=num2,*temp; /同为正 if (*str1! *str2! /字符串转为整型数组 for(i=0,j=strlen(str1)-1;i+,j-) *(inta+j)=*(str1+i)- for(i=0,j=strlen(str2)-1;strlen(str2); *(intb+j)=*(str2+i)- /数组模拟加法 for(i=0;maxlength(str1,str2); *(intc+i)=(*(inta+i)+*(intb+i)+*(flag+i)%10; *(flag+i+1)=(*(inta+i)+*(intb+i)+*(flag+i)
12、/10; /有进位,保存进位;无进位舍去无意义的0;0+0=0; if (*(flag+i) *(intc+i)=*(flag+i);i=0;i-,j+) *(result+j)=(char)(*(intc+i)+ /一个为负 else if(*str1=)|(*str1! *str2=) /保证第二个数为负 if (*str1= temp=str1; str1=str2; str2=temp; for(i=1,j=strlen(str2)-2; /数组模拟减法 if(ispositive(str1,str2) for(i=0; if(*(inta+i)-*(intb+i)+*(flag+i)
13、 *(intc+i)=(*(inta+i)-*(intb+i)+*(flag+i)%10; else *(intc+i)=(10+*(inta+i)-*(intb+i)+*(flag+i)%10; *(flag+i+1)=-1; /消除无意义的0 while(*(intc+i)=0) -i; for(j=0; *(result+j)=(char)(*(intc+i)+ if(*(intb+i)-*(inta+i)+*(flag+i) *(intc+i)=(*(intb+i)-*(inta+i)+*(flag+i)%10; *(intc+i)=(10+*(intb+i)-*(inta+i)+*(
14、flag+i)%10; for(i=j;0;i-) *(result+i)=*(result+i-1); *result= /同为负 for(i=1,j=strlen(str1)-2;maxlength(str1,str2)-1; if (*(flag+i) for(i=j; *(result+i)=*(result+i-1); *result=int maxlength(const char *a,const char *b) int x; x=strlen(a)strlen(b) ? strlen(a) : strlen(b); return x;void print(const char
15、 *result) unsigned int i=0; printf(%c,*(result+i);int ispositive(const char *str1, const char *str2) if(strlen(str1)strlen(str2) else if(strlen(str1) return(strcmp(str1,str2)?1:0);/高精度加法(减法)法2int ispstv(const char *str1, const char *str2); char num1MAXLEN-1,num2MAXLEN-1,resultMAXLEN; unsigned int i=0,flag=0; /输入字符串,加容错设计,考虑输的是不是有效数字 while(flag=0) gets(num1); if(*num1= if(*(num1+1)= flag=0; continue; for(i=1;strlen(num1); if(*(num1+i) flag=0; break; if(i=strlen(num1) flag=1; if(*num1= flag=0; while(flag=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1