首页 > 其他分享 >字符串相加,给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

字符串相加,给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

时间:2024-08-20 19:38:11浏览次数:3  
标签:num1 num2 int 整数 char 字符串

字符串相加,给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/**
 * 将两个字符串形式的非负整数相加,并返回结果字符串。
 * 
 * @param num1 第一个整数的字符串表示
 * @param num2 第二个整数的字符串表示
 * @return 新分配的字符串,表示两个整数的和
 */
char* addStrings(char* num1, char* num2) 
{
    int len1 = strlen(num1);  // num1的长度
    int len2 = strlen(num2);  // num2的长度
    int maxLen = len1 > len2 ? len1 : len2;  // 取两个字符串长度的较大值

    // 申请足够的空间,加1是为了存储字符串结束符'\0',再加1是为了可能的进位
    char* result = (char*)malloc((maxLen + 2) * sizeof(char));
    if (!result) 
    {
        perror("Memory allocation failed");
        exit(EXIT_FAILURE);
    }
    result[maxLen + 1] = '\0';  // 初始化字符串结束符

    int i = len1 - 1;
    int j = len2 - 1;
    int k = maxLen;  // result的索引,从最高位开始

    int carry = 0;  // 初始化进位为0

    // 相加循环,直到两个字符串都处理完,或者出现进位
    while (i >= 0 || j >= 0 || carry > 0)
    {
        int digit1 = i >= 0 ? num1[i--] - '0' : 0;  // num1的当前位,如果i<0则为0
        int digit2 = j >= 0 ? num2[j--] - '0' : 0;  // num2的当前位,如果j<0则为0
        int sum = digit1 + digit2 + carry;  // 当前位的和加上进位
        result[k--] = (sum % 10) + '0';  // 计算当前位的数字,并存储到result
        carry = sum / 10;  // 更新进位
    }

    // 如果result[0]是'0',说明有前导零,需要去掉
    return result[0] == '0' ? &result[1] : result;
}

int main() 
{
    char num1[] = "123";
    char num2[] = "456";
    char* sum = addStrings(num1, num2);

    printf("The sum of '%s' and '%s' is: %s\n", num1, num2, sum);

    free(sum);  // 释放之前动态分配的内存
    return 0;
}

标签:num1,num2,int,整数,char,字符串
From: https://www.cnblogs.com/lwj294/p/18370169

相关文章

  • 信息学奥赛初赛天天练-70-NOIP2016普及组-基础题1-二进制、二进制状态表示、二进制加
    NOIP2016普及组基础题11以下不是微软公司出品的软件是()APowerpointBWordCExcelDAcrobatReader2如果256种颜色用二进制编码来表示,至少需要()位A6B7C8D93以下不属于无线通信技术的是()A蓝牙BWifiCGPRSD以太网7......
  • 根据字符串动态地注册服务
    usingSystem;usingSystem.Reflection;usingMicrosoft.Extensions.DependencyInjection;publicclassStartup{publicvoidConfigureServices(IServiceCollectionservices){//假设我们要注册的类名是"MyService"stringserviceName=&......
  • 11 根据相应规则判断字符串是否正确
    现有两个机器人M1和M2它们要进行对话,规则如下:M1只会说“Y”,“N”,“2”;M2只会说“y”,“n”,“1”;M1先主动说话;当一个机器人说的不是数字时,它自己必须继续说话,对方不能说话;当一个机器人说出数字时,它自己停止说话,此时对方可以接着说话,也可以不说话从而结束对话;编写程序判定输......
  • 【C语言】基础知识详解(二) 字符串
    一、什么是字符串?在C语言中,字符串是一种特殊的字符数组,用于存储一系列字符。字符串的表示:在C语言中,字符串是由字符组成的数组,并以空字符'\0'结束。空字符用于标识字符串的结束。例如,字符串"hello"在内存中实际上是{'h','e','l','l','o','\0'}。字符串声明:可以使......
  • 字符串相乘
    给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的BigInteger库或直接将输入转换为整数。示例1:输入:num1="2",num2="3"输出:"6"示例 2:输入:num1="123",num2="45......
  • Oracle数据库必学!超实用的9个字符串处理函数
    Oracle查询语句中的单行函数,特别是一些常用的字符串处理函数。1.ConCAT函数作用:将两个字符串连接在一起,生成一个新的字符串。使用方法:concat(字符串1,字符串2)示例:SELECTconcat('Hello,','World')FROMDUAL;结果为:“Hello,World”。2.CHR与ASCII函数CHR函数......
  • 字符函数与字符串函数详解
    ......
  • 【杂乱笔记】Kmp字符串匹配算法
    KMP算法逻辑构建next数组:初始化next数组,用于存储每个位置的最长相同前后缀长度。遍历模式字符串patt如果当前字符与前缀字符匹配,增加前缀长度,并更新next数组。如果不匹配,使用next[prefix\_len-1]回退到上一个可能的前缀长度,继续比较。字符串匹配:初始......
  • 赎金信(判断一个字符串是都可以通过另一个字符串进行转化)
     这个题目属于简单的类型,使用字典来进行词频统计,如果ransomNote中key的个数大于magazine,或者ransomNote的key在magazine中找不到,就返回False。classSolution:defcanConstruct(self,ransomNote:str,magazine:str)->bool:m_dict={}r_dict={}......
  • Vue——el-option下拉框绑定,value为数字和字符串区别
    Vue——el-option下拉框绑定1、正常使用v-for进行遍历下拉框内容,如果需要增加一个自定义的值,则加一个el-optionel-option用法:参数说明类型可选值默认值value选项的值string/number/object——label选项的标签,若不设置则默认与v......