返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言超详细讲解字符串相乘
  • 428
分享到

C语言超详细讲解字符串相乘

2024-04-02 19:04:59 428人浏览 八月长安
摘要

目录前言一、分析思路二、使用步骤1、代码如下2、memset函数三、总结前言 我们已经知道,正常的两位整形数据通过*相乘,C语言中int为4字节,32bit(字节),其机器码第一位为

前言

我们已经知道,正常的两位整形数据通过*相乘,C语言中int为4字节,32bit(字节),其机器码第一位为符号位,余下31位表示数字,表示范围:-2^31(-2147483648)~2^31-1(2147483647),但超过了这个范围我们该如何做呢?

提示:将数字以字符串的形式进行操作

一、分析思路

示例:

我们把每一个数都看成是一个字符串,每一个元素为十进制数字所对应的字 符,由于是后面的元素先进行运算,故我们应当把末尾的字符赋值给a[0],以此类推。如下所示:(s1,s2分别表示两个相乘的字符串)


for(i=0; i<n; i++)
            a[i]=s1[n-i-1]-'0';
        for(i=0; i<m; i++)
            b[i]=s2[m-1-i]-'0';

当我们把需要操作的前后顺序弄清之后,接下来就是核心的算法部分了(看了几篇关于这个的博文,都没有详细的去解释这个问题)。其实上一张图片已经展示了将要做的算法步骤,但是说实话也不是说得很清楚,接下来看一下这张图片:

当我们把需要做的元素具体化之后,我们看到了其中的一个规律,上下能够进行相加的数字(通过-‘0’已经变成了数字)他们的因数的角标和是相等的,那么,我们就知道如何进行计算:



        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                c[i+j]+=a[i]*b[j];

n,m分别代表字符串的长度,也就是相乘元素的个数。解决了这个问题,剩下的问题便不是问题

二、使用步骤

1、代码如下

代码如下(示例):


//大数乘法(字符串相乘)
#include<stdio.h>
#include<math.h>
#include<string.h>
#define M 10005
char s1[M],s2[M],s[M];
int a[M],b[M],c[M];
int main()
{
    int i,j,m,n,k;
    while(~scanf("%s%s",s1,s2))
    {
        memset(c,0,sizeof(c));
        n=strlen(s1);
        m=strlen(s2);
        k=n+m;//保证相乘后的位数不会大于k
        printf("s1的长度=%d s2的长度=%d\n",n,m);
 
        for(i=0; i<n; i++)
            a[i]=s1[n-i-1]-'0';
        for(i=0; i<m; i++)
            b[i]=s2[m-1-i]-'0';
          
        for(i=0; i<n; i++)
            for(j=0; j<m; j++)
                c[i+j]+=a[i]*b[j];
        for(i=0; i<=k; i++)//进行进位操作
        {
            if(c[i]>=10)
            {
                c[i+1]+=c[i]/10;
                c[i]%=10;
            }
        }
 
        i=k;
        while(c[i]==0) i--;
 
        if(i<0) printf("0");
        else
        {
            for(; i>=0; i--)
                printf("%d",c[i]);
        }
        printf("\n");
    }
    return 0;
}

2、memset函数

这里我们利用memset将c进行初始化,那为什么不直接char c[]={0}?是因为如果字符串太长,将会使代码运行较慢,并不是最优解,而memset函数是直接访问地址,运行速度将会提升。

memset有三个参数,通过图片我们发现依次为数组名,赋值整形,以及类型字节长度,我们可以利用sizeof(void)求出

三、总结

对于这里相乘的算法,一开始也不是很清楚,但当把他这种抽象的东西表达出来使其具象化,也不难看出其中的奥妙。

到此这篇关于C语言超详细讲解字符串相乘的文章就介绍到这了,更多相关C语言 字符串相乘内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言超详细讲解字符串相乘

本文链接: https://lsjlt.com/news/144361.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言超详细讲解字符串相乘
    目录前言一、分析思路二、使用步骤1、代码如下2、memset函数三、总结前言 我们已经知道,正常的两位整形数据通过*相乘,C语言中int为4字节,32bit(字节),其机器码第一位为...
    99+
    2024-04-02
  • C++超详细讲解字符串类
    目录一、历史遗留问题二、解决方案三、标准库中的字符串类四、字符串循环右移五、小结一、历史遗留问题 C 语言不支持真正意义上的字符串C 语言用字符数组和一组函数实现字符串操作C 语言不...
    99+
    2024-04-02
  • C语言超详细讲解字符串函数和内存函数
    目录字符串函数长度不受限制的字符串函数strlenstrcpystrcatstrcmp长度受限制的字符串函数介绍strncpystrncatstrncmp字符串查找以及错误报告str...
    99+
    2024-04-02
  • C语言超全面讲解字符串函数
    目录1、gets函数2、puts函数3、strcat函数4、strcpy函数(strncpy函数)5、strcmp函数(strncmp函数)6、strlen函数7、strlwr函数8...
    99+
    2024-04-02
  • C语言操作符超详细讲解下篇
    目录前言赋值操作符单目操作符单目操作符介绍sizeof 和 数组关系操作符逻辑操作符条件操作符逗号表达式下标引用与函数调用和结构成员[ ] 下标引用操作符( ) 函数调用操作符访问一...
    99+
    2024-04-02
  • C语言操作符超详细讲解上篇
    目录前言1、操作符的分类2、算术操作符3、移位操作符3.1 左移操作符3.1.1 正数左移1位3.1.2 负数左移1位3.2 右移操作符3.2.1 正数右移1位3.2.2 负数右移1...
    99+
    2024-04-02
  • C语言详细讲解常用字符串处理函数
    目录一、strlen()1. 函数原型:2. 手动实现:二、strcat()1. 函数原型:2. 手动实现:三、strcpy()1. 函数原型:2. 手动实现:四、strcmp()1...
    99+
    2024-04-02
  • C语言中字符串相乘的示例分析
    这篇文章主要介绍C语言中字符串相乘的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 分析思路示例:我们把每一个数都看成是一个字符串,每一个元素为十进制数字所对应的字 符,由于是后面的元素先进行运算,故我们...
    99+
    2023-06-29
  • C语言超详细讲解库函数
    目录1 返回整数的getchar函数2 更新顺序文件3 缓冲输出与内存分配4 库函数练习1 返回整数的getchar函数 代码: #include<stdio.h> ...
    99+
    2024-04-02
  • C语言 超详细讲解链接器
    目录1 什么是链接器2 声明与定义3 命名冲突3.1 命名冲突3.2 static修饰符4 形参、实参、返回值5 检查外部类型6 头文件1 什么是链接器 典型的链接器把由编译器或汇编...
    99+
    2024-04-02
  • C语言结构体超详细讲解
    目录前言1、结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2、结构体成员的访问2.1 点操作符访问2.2 ->操作符...
    99+
    2024-04-02
  • C语言数组超详细讲解上
    目录前言1、一维数组的创建和初始化1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储2、二维数组的创建和初始化2.1 二维数组的创建2...
    99+
    2024-04-02
  • C语言超详细讲解线性表
    目录1. 顺序表1.1 管理结点1.2 顺序表的插入1.3 顺序表的删除1.4 顺序表的扩容2. 链表2.1 定义2.2 头部插入2.3 尾部插入2.4 任意位置插入2.5 任意位置...
    99+
    2024-04-02
  • 超详细的c语言字符串操作函数教程
    目录一,常量指针与指针常量二,字符串长度问题三,c语言中的字符串拷贝函数1) strcpy()2), strncpy()3), strcat()4), strncat()5), st...
    99+
    2024-04-02
  • Java 超详细讲解字符流
    目录一、字符流的由来二、编码表字符集:Unicode字符集:UTF-8编码规则:三、字符串中的编码解码问题编码方法(IDEA):解码方法(IDEA):四、字符流的编码解码问题四、字符...
    99+
    2024-04-02
  • C语言超详细讲解轮转数组
    目录题目描述实例解题思路1. 先整体逆转2.逆转子数组[0, k - 1]3.逆转子数组[k, numsSize - 1]易错点代码题目描述 给你一个数组,将数组中的元素向右轮转 k...
    99+
    2024-04-02
  • C语言 struct结构体超详细讲解
    目录一、本章重点二、创建结构体三、typedef与结构体的渊源四、匿名结构体五、结构体大小六、结构体指针七、其他一、本章重点 创建结构体typedef与结构体的渊源匿名结构体结构体大...
    99+
    2024-04-02
  • C语言指针超详细讲解上篇
    目录前言1、指针是什么1.1 指针变量1.2 指针是内存中一个最小单元的编号2、指针和指针类型2.1 指针±类型2.2 指针的解引用2.2.1 int* 类型的解引用2...
    99+
    2024-04-02
  • C语言指针超详细讲解下篇
    目录前言指针运算指针±整数指针-指针指针的关系运算指针和数组二级指针指针数组举例 1举例 2总结前言 本文接着上一篇内容,继续学习指针相关知识点。 指针运算 指针&pl...
    99+
    2024-04-02
  • C语言函数超详细讲解上篇
    目录前言1、函数是什么?2、C语言中函数的分类2.1 库函数2.1.1 如何学会使用库函数2.1.2 自定义函数3、函数的参数3.1 实际参数(实参)3.2 形式参数(形参)4、函数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作