【算法】(简单题)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; // 程序正常结束
}

posted @ 2024-11-19 22:10  朝槿yys  阅读(1)  评论(0编辑  收藏  举报