zoukankan      html  css  js  c++  java
  • 【思考题】字符串计算递归式

    需求:

    //已知一个递推公式A[N+1] = A[N] * 2 + 2,且A[1] = 2,求A[N]的值
    //限制:
    //0< n <65535
    //举例:
    //A[1] = 2, A[5] = 62, A[8] = 510


    思路:

    主要实现一个字符串加法计算函数,乘以2则可视为两个相同数相加而成。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* string_add(char* s1, char* s2){
    	int s1len,s2len,anslen;
    	int k1,k2,ansk,c,s;
    	char *ans,*ansrtn;
    
    	s1len=strlen(s1);
    	s2len=strlen(s2);
    
    	anslen=s1len>s2len?s1len+1:s2len+1;
    	ans = (char*)malloc(sizeof(char)*(anslen+1));
    	k1 = s1len-1;
    	k2 = s2len-1;
    	ansk = anslen-1;
    	s=0; c=0;
    	while(k1>=0||k2>=0){
    		if(k1>=0&&k2>=0){
    			c = s1[k1--]+s2[k2--]-'0'-'0'+s;
    			ans[ansk--] = c%10+'0';
    			s = c/10;
    		}
    		else if(k1>=0){
    			c = s1[k1--]-'0'+s;
    			ans[ansk--] = c%10+'0';
    			s = c/10;
    		}
    		else if(k2>=0){
    			c = s2[k2--]-'0'+s;
    			ans[ansk--] = c%10+'0';
    			s = c/10;
    		}
    	}
    	//free((char*)s1);
    	ans[0] = s+'0';
    	ans[anslen] = '';
    	if(s==0){
    		ansrtn = (char*)malloc(sizeof(char)*(anslen-1));
    		strcpy(ansrtn, &ans[1]);
    		free(ans);
    		return ansrtn;
    	}
    	else
    		return ans;
    }
    
    int main(void){
    	int n,k;
    	char *an, *temp;
    	char *a1;
    
    	a1 = (char*)malloc(sizeof(char)*2);
    	a1[0] = '2'; a1[1] = '';
    	scanf("%d", &n);
    	if(n<1||n>65534)
    		return 0;
    	for(k=1, an=a1; k<n; k++){
    		//temp = an;
    		an = string_add(an, an);  //??????-->怎么释放掉之前的an指向的空间呀?
    		//free(temp);
    		//temp = an;
    		an = string_add(an, "2");
    		//free(temp);
    	}
    
    	printf("%s", an);
    
    	system("pause");
    	return 0;
    }


  • 相关阅读:
    AJAX异步交互
    Java 异常讲解(转)
    Spring 配置文件详解 (以2.5为例)
    Java 获取当前系统时间方法比较
    Cannot change version of project facet Dynamic web module to 3.0
    使用 GCC 调试程序
    汇编 内存段划分和寄存器
    java.lang.StringBuilder
    java.lang.String
    建立和断开与MySQL服务器的连接
  • 原文地址:https://www.cnblogs.com/xhyzjiji/p/6159380.html
Copyright © 2011-2022 走看看