C语言 大数相乘(逆序字符串处理)

#include <stdio.h>
#include <string.h>
/* 大数相乘  2018年9月7日22:21:02 */

/* 大数采取进位处理的函数 */
void carryFunc(int array_num[], int len)
{
    for (int k = 0; k < len + 1; k ++)
    {
        if (array_num[k] >= 10)
        {
            array_num[k + 1] += array_num[k] / 10;
            array_num[k] %= 10;
        }
        else
        {
            array_num[k] %= 10;
        }
    }
}

/* 打印输出数组的函数 */
void printArray(int array[], int length)
{
    for (int i = 0; i < length; i ++)
    {
        printf("%d ", array[i]);
    }
    printf("\n\n");
}

/* 逆序输出数组的函数 */
void printArrayRe(int array[], int length)
{
    if (array[length - 1] == 0)
    {
        for (int i = length - 2; i >= 0; i --)
        {
            printf("%d", array[i]);
        }
    }
    else
    {
        for (int i = length - 1; i >= 0; i --)
        {
            printf("%d", array[i]);
        }
    }
    printf("\n\n");
}

/* 字符替换成数字的函数 */
void reArray(int array[], char str[], int length)
{
    for (int i = 0; i < length; i ++)
    {
        array[i] = str[length - i - 1] - '0';
    }
}

int main()
{
    /* 1. 定义字符数组存储数字字符,并通过终端输入 */

	char string_numb_upper[100];
        char string_numb_under[100];

	scanf("%s %s", string_numb_upper, string_numb_under);
	//printf(" %s \n %s \n", string_numb_upper, string_numb_under);

	/* 2. 把字符逆序转换成数字存入整型数组 */

	int m = strlen(string_numb_upper);
	int n = strlen(string_numb_under);
	int array_numb_upper[m];
	int array_numb_under[n];

	reArray(array_numb_upper, string_numb_upper, m);
	reArray(array_numb_under, string_numb_under, n);
    //printArray(array_numb_upper, m); //打印调试
    //printArray(array_numb_under, n); //打印调试

    /* 3. 两个数组元素逐个相乘并把结果赋值给目标数组 */
    int len = m + n;
    int array_num[len];

    for (int i = 0; i < len; i ++)
    {
        array_num[i] = 0;
    }

    for (int i = 0; i < m; i ++)
    {
        for (int j = 0; j < n; j ++)
        {
            array_num[i + j] += array_numb_upper[i] * array_numb_under[j];
        }
    }

    /* 4. 进位 */
    carryFunc(array_num, len);

    /* 5. 打印结果 */
    //printArray(array_num, len);         // 结果打印调试
    printArrayRe(array_num, len);       // 最终结果

    /* END = 2018年9月9日23:05:16 */

    printf("\n\n Hello World ! \n");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值