大数运算!(3)乘法

简介: 大数运算!(3)乘法

求a*b

先定义3个数组,在求出接受数字的那两个数组的长度,根据数学知识知道,i位数和j位数的乘积位数在[i+j-1,i+j]这个区间内。

因为要用第三个数组来接受乘积,所以将第三个数组都设置为零,运用memset函数。(作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作)

然后开始进行遍历,运用两次for循环。c[i + j + 1]代表进位值,c[i + j]代表个位上的数(表述不出来……)上代码

#include <stdio.h>
#include<string.h>
int main()
{
    char a[1000],b[1000];
    int c[2000];
    while(scanf("%s%s",a,b)!= EOF)
    {
        int al,bl,ai,bi;
        al = strlen(a);
        bl = strlen(b);
        memset(c, 0, sizeof(c));
        for(int i = 0; i < al; i++){
            ai = a[al - i -1] - '0';
            for(int j = 0; j < bl; j++) {
                bi = b[bl - j - 1] - '0';
                c[i + j] += ai * bi;
                c[i + j + 1] += c[i + j] / 10;
                c[i + j] = c[i + j] % 10;
            }
        }
        int k = al + bl;
        while(c[k] == 0) k--;
        if(k < 0)
            puts("0");//这是当0作为乘数时的情况,直接输出零
        else{
            while(k >= 0)
                printf("%d", c[k--]);
            puts("");
            }
    }
    return 0;
}
【PS:下面的while循环是去掉前导零的过程。k取位数最大时的情况,在依次看是不是有零,有零就在看下一位,直至找到不为零的数在开始倒序输出。】
相关文章
|
11天前
537. 复数乘法
537. 复数乘法
|
1月前
|
计算机视觉
加法运算
【5月更文挑战第8天】加法运算。
19 4
|
1月前
|
C++
C++系列-第1章顺序结构-6-加法、减法和乘法
C++系列-第1章顺序结构-6-加法、减法和乘法
大数运算!(2)减法
大数运算!(2)减法
|
Java
不用加减乘除做加法
不用加减乘除做加法
76 0
不用加减乘除做加法
|
数据库
关系代数运算——除法运算
关系代数运算——除法运算
205 0
关系代数运算——除法运算
04:带余除法
04:带余除法
172 0
7-2 一元多项式的乘法与加法运算 (20 分)
7-2 一元多项式的乘法与加法运算 (20 分)
117 0