• 大数相乘2


    算法描述:

                9     8     7

    *                 8     7


                63    56    49

          72    64    56             (第一个for循环中的累乘和累加)


          72    127   112  49

          72    127   116  9    

          72    138   6    9

          85    8     6    9                        (第二个for循环中的循环进位)

    //大数相乘
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    
    void multiply(int *num1, int length1, int *num2, int length2, int *product)
    {
    	int i, j;
    	for (j = length2 - 1; j >= 0; j--)
    	{
    		for (i = length1 - 1; i >= 0; i--)
    		{
    			product[i + j] += num1[i] * num2[j];
    		}
    	}
    
    	for (i = length1 + length2 - 2; i >=1; i--)
    	{
    		if (product[i] > 10)
    		{
    			product[i - 1] += product[i] / 10;
    			product[i] = product[i] % 10;
    		}
    	}
    }
    
    int main()
    {
    	char str1[255], str2[255];
    	int length1, length2;
    	int *num1, *num2;
    	int *product;
    	int i;
    
    	gets(str1);
    	gets(str2);
    
    	length1 = strlen(str1);
    	length2 = strlen(str2);
    
    	num1 = malloc(sizeof(int)*length1);
    	num2 = malloc(sizeof(int)*length2);
    	product = malloc(sizeof(int)*(length1+length2-1));
    	memset(product, 0, sizeof(int)*(length1 + length2 - 1));
    
    	for (i = 0; i < length1; i++)
    	{
    		num1[i] = str1[i] - '0';
    	}
    	for (i = 0; i < length2; i++)
    	{
    		num2[i] = str2[i] - '0';
    	}
    
    	multiply(num1, length1, num2, length2, product);
    
    	for (i = 0; i < length1+length2-1; i++)
    	{
    		printf("%d",product[i]);
    	}
    	return 0;
    }
  • 相关阅读:
    JS身份证真实性校验(一)
    Python之文件操作
    python之数据类型
    Python之循环条件、变量、字符串格式化
    webpack之proxyTable设置跨域
    vue报错解决方案
    CentOS 7 下Ansiable搭建命令列表 及常用监控指令
    CentOS 7 下nagios搭建记录
    弹窗鼠标拖动功能-js
    做好探索性测试,体现你的价值
  • 原文地址:https://www.cnblogs.com/Camilo/p/3843415.html
Copyright © 2020-2023  润新知