H2330819027


私信TA

用户名:dotcpp0701405

访问量:8358

签 名:

指向函数指针数组的指针int(*(*p[4]))(int int)

等  级
排  名 128
经  验 7461
参赛次数 1
文章发表 79
年  龄 18
在职情况 学生
学  校 Hzu university
专  业 软件工程

  自我简介:

解题思路:
屏幕截图 2023-11-26 121928.png

定义两个字符串 s1 和 s2,用于存储输入的两个大整数。

通过 scanf 从标准输入中读取两个字符串。

计算两个字符串的长度 la 和 lb,以确定大整数的位数。

初始化数组 a 和 b,用于存储将字符转换为整数后的数字。遍历字符串 s1 和 s2,将每个字符转换为整数并存储在相应的数组中。

计算结果数组 c 的长度 lc,即两个输入字符串中较长的长度加1,以便处理可能的进位。

使用循环进行高精度加法操作:

从最低位开始,逐位将数组 a 和 b 中的数字相加,同时加上上一位的进位。

计算当前位的结果并将余数存储在 c 中,同时将整数部分作为进位传递给下一位。

检查最高有效位(c[lc])是否为0,如果是0且数组长度大于0,则删除前导0,即将 lc 减1。

最后,逆序输出数组 c 中的结果,即从高位到低位。

这个代码的主要目的是实现两个大整数的高精度加法,处理了进位和前导0的情况,最终输出结果。






参考代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
 
char s1[201];
char s2[201];
int a[201], b[201], c[201];
 
int main() {
    // 从标准输入读取两个字符串
    scanf("%s", s1);
    scanf("%s", s2);
 
    // 计算输入字符串的长度
    int la = strlen(s1);
    int lb = strlen(s2);
 
    // 初始化数组a和b,用于存储将字符转换为整数后的数字
    for (int i = 0; i < la; i++)
    {
        a[la - i] = s1[i] - '0'; // 将字符转换为整数并存储在a数组中
    }
    for (int i = 0; i < lb; i++)
    {
        b[lb - i] = s2[i] - '0'; // 将字符转换为整数并存储在b数组中
    }
 
    // 计算lc,即c数组的长度,也就是两个输入字符串中较长的长度加1
    int lc = la > lb ? la + 1 : lb + 1; // 用于处理进位
 
    // 执行高精度加法
    for (int i = 1; i <= lc; i++)
    {
        c[i] += a[i] + b[i]; // 将a、b中对应位置的数字相加并加上进位
        c[i + 1] = c[i] / 10; // 计算进位
        c[i] = c[i] % 10; // 计算当前位的结果
    }
 
    // 删除前导0,即去掉结果数组中最高有效位后的0
    if (c[lc] == 0 && lc > 0)
    {
        lc--; // 删除前导0
    }
 
    // 输出结果
    for (int i = lc; i > 0; i--)
    {
        printf("%d", c[i]); // 逆序输出结果,即从高位到低位
    }
 
    return 0;
}

lc > 0 的判断是为了确保不会删除所有前导0。在高精度计算中,前导0通常不会影响数字的值,但是为了表示一个数字的唯一性,我们通常会保留一个前导0,以确保表示的是正数而不是0。

考虑以下情况:如果两个数字相加的结果确实是0,那么删除所有前导0后,结果将变为空字符串,这可能不是我们想要的。为了保留一个前导0,我们使用 lc > 0 来检查最高有效位是否为0。如果最高有效位是0,但 lc 仍然大于0,那么我们会删除前导0,将 lc 减小到0。但是,如果 lc 已经为0,表示结果确实是0,就不需要再删除前导0了。

所以,lc > 0 的判断是为了确保至少保留一个前导0,以表示结果为正数而不是0。

假设我们要计算数字123456和数字789相加,结果是124245。如果我们不删除前导0,输出结果将是00124245,但通过删除前导0,输出结果将是124245。

 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区