【算法】(简单题)1.数字字符串相乘
#include<stdio.h>
#include<stdlib.h> // 包含 malloc 和 free 的头文件
#include<string.h> // 包含字符串相关操作的头文件
// 定义字符串乘法函数
char* multiply(const char* num1, const char* num2) {
// 定义结果字符串指针
char* ans = NULL;
long res = 0;
long a = 0, b = 0;
// 参数为空时返回 NULL
if (num1 == NULL || num2 == NULL) return NULL;
// 遍历 num1,转换为整数
const char* ptr1 = num1; // 临时指针避免修改原始参数
while (*ptr1 != '\0') {
if (*ptr1 >= '0' && *ptr1 <= '9') {
a = a * 10 + (*ptr1 - '0'); // 累积计算整数值
} else {
return NULL; // 非数字字符,返回 NULL
}
ptr1++;
}
// 遍历 num2,转换为整数
const char* ptr2 = num2; // 临时指针避免修改原始参数
while (*ptr2 != '\0') {
if (*ptr2 >= '0' && *ptr2 <= '9') {
b = b * 10 + (*ptr2 - '0'); // 累积计算整数值
} else {
return NULL; // 非数字字符,返回 NULL
}
ptr2++;
}
// 计算乘积
res = a * b;
// 分配足够的内存存储结果字符串(最大 20 位 + 1)
ans = (char*)malloc(21 * sizeof(char));
if (ans == NULL) return NULL; // 分配失败时返回 NULL
// 将结果转换为字符串
snprintf(ans, 21, "%ld", res); // 使用 snprintf 格式化输出
return ans; // 返回结果字符串
}
int main() {
// 定义两个输入字符串
char* num1 = "123";
char* num2 = "456";
// 调用乘法函数
char* ans = multiply(num1, num2);
// 输出结果
if (ans != NULL) {
printf("Result: %s\n", ans); // 正常打印结果
free(ans); // 释放分配的内存
} else {
printf("Invalid input or memory allocation failed.\n");
}
system("pause"); //仅适用于 Windows; 可以用标准 C 库函数 getchar()来实现相同的暂停效果,跨平台且更安全
return 0; // 程序正常结束
}