1998-c-四

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//逆置指针字符串 
void invert(char *str,int len)
{
    char * p1 = str;
    char * p2 = str + len - 1;
    while(p1 < p2)
    {
        char c = *p1;
        *p1 = *p2;
        *p2 = c;
        ++p1;
        --p2;
    }
}

int main() {
	char str1[] = "5689";//字符串1
	char str2[] = "356";//字符串2

	int len1 = strlen(str1);//取字符串1的长度
	int len2 = strlen(str2);//取字符串2的长度

	invert(str1,len1);//逆置 
	invert(str2,len2);

	//结果字符串动态分配
	char *result;
	result = (char*)malloc(len1 + len2);

	//初始化结果字符串
	for(int k = 0; k < len1 + len2; k++) {
		result[k] = '0';
	}
	
	for(int i=0;i<len1+len2;i++) {
		printf("%c",result[i]);
	}
	printf("\n");

	for(int i=0; i<len1; i++) {
		for(int j=0; j<len2; j++) {
			int pos = i + j;//待写入位置
			int tmp = (str1[i] - '0') * (str2[j] - '0') + (result[pos] - '0');
			result[pos] = tmp % 10 + '0';  //将余数写入对应位置
			//产生的进位
			int carry = tmp / 10;
			//当进位大于0,则更新下一位,一直更新,直到进位为0
			while(carry > 0) {
				//下一个位置的数真值加上进位得到tmp
				tmp = result[pos + 1] - '0' + carry;
				//下一个位置等于tmp对10求余数
				result[pos + 1] = tmp % 10 + '0';
				//计算进位
				carry = tmp / 10;
				//移动位置
				pos++;
			}
			for(int i=0; i<len1+len2;i++) {
				printf("%c",result[i]);
			}	
			printf("\n");
		}
	}
	/**
	 	char *str1= "5689"(静态存储区)
		char str[] = "5689"(栈区)
	 	(char*)malloc(len1 + len2)(堆区);
	 **/
	invert(result,len1+len2);
	for(int i=0; i<len1+len2;i++) {
		printf("%c",result[i]);
	}	
	
	return 0; 
}