#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;
}