首页 > 编程语言 >【算法】(简单题)1.数字字符串相乘

【算法】(简单题)1.数字字符串相乘

时间:2024-11-19 22:23:13浏览次数:1  
标签:return num1 算法 char 相乘 ans 字符串 NULL

#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; // 程序正常结束
}

标签:return,num1,算法,char,相乘,ans,字符串,NULL
From: https://www.cnblogs.com/luckyyys/p/18555704

相关文章

  • 深入理解 LMS 算法:自适应滤波与回声消除
    深入理解LMS算法:自适应滤波与回声消除在信号处理领域,自适应滤波是一种重要的技术,广泛应用于噪声消除、回声消除和信号恢复等任务。LMS(LeastMeanSquares)算法是实现自适应滤波的经典方法之一。本文将详细介绍LMS算法的原理,包括公式推导,并通过Python代码示例展示其在......
  • 牛客15天刷题Day1_ZT6_小红的字符串构造
    ZT6小红的字符串构造这是题面构造思维思路不用想得很复杂可以看成一个匹配问题,每一个字符要和一个与自己不同得字符匹配,而且每一个字符都要匹配,每一个字符都要被匹配到我们可以先用一个集合统计有多少种字符\(set(s_1,s_2,s_3,\dotss_n)\),让所有字符都被匹配到,一种......
  • #渗透测试#SRC漏洞挖掘#网络运维# 黑客脚本编写05之字符串运算符与逻辑运算
    免责声明本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。                            ......
  • 【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
    文章目录C++模拟题详解:基础题解与细致分析前言第一章:基础练习1.1替换所有的问号(easy)解法(模拟)C++代码实现易错点提示时间复杂度和空间复杂度1.2提莫攻击(easy)解法(模拟+分情况讨论)C++代码实现易错点提示时间复杂度和空间复杂度1.3N字形变换(medium)解法(模拟+找......
  • 代码随想录算法训练营day51| 卡码网99.岛屿数量 卡码网100.岛屿的最大面积
    学习资料:https://www.programmercarl.com/kamacoder/0099.岛屿的数量深搜.html#思路深度优先搜索和广度优先搜索今天用的邻接矩阵学习记录:卡码网99.岛屿数量(深搜or广搜;用一个自己设计的二维矩阵来控制节点的移动方向:上下左右)点击查看代码fromcollectionsimportdequedi......
  • 【算法】AC 自动机
    1.算法简介AC自动机,是用来多模式匹配串的算法。最好可以做到\(O(\sum|t_i|\times|\sigma|+|s|)\)。(预处理\(O(\sum|t_i|\times|\sigma|)\),查询时间复杂度为\(O(|s|)\))。2.算法流程AC自动机可以处理这样的问题:给定\(n\)个匹配串和一个模式串,求出模式串中出现了......
  • 字节青训-判断数组是否单调、判断回旋镖的存在、字符串解码问题、小F的矩阵值调整、数
    目录一、判断数组是否单调问题描述测试样例解题思路:解题思路数据结构选择算法步骤 最终代码:运行结果:​编辑  二、判断回旋镖的存在问题描述测试样例解题思路: 解题思路算法步骤最终代码:运行结果:​编辑 三、字符串解码问题问题描述测试样例 解题思......
  • 2024年11月一区SCI-逃离优化算法Escape Algorithm-附Matlab免费代码
    引言本期介绍了一种受人群疏散行为的启发的元启发式优化算法,称为逃离优化算法EscapeAlgorithm,ESC。该算法于2024年11月最新发表在JCR1区,中科院2区TopSCI期刊 ArtificialIntelligenceReview。ESC的灵感来自于人们在紧急疏散期间的行为。本节解释人群疏散系统的背景,以及......
  • 【入门】字符串的反码c++
    #include<bits/stdc++.h>usingnamespacestd;intmain(){ //一、分析问题 //已知:一个长度不超过80个字符的字符串。 //未知:字符串的反码。 //关系:如果这是一个小写字符,则它和字符a的距离与它的反码和字符z的距离相同;如果是一个大写字符,则它和字符A的距离与它......
  • 7-14 判断回文字符串
    输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。输入格式:输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。输出格式:输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No......