zoukankan      html  css  js  c++  java
  • 大数据的乘法实现——C语言

    1大数据乘法的算法思路:

        输入两个字符串,得到结果,例如:123456789*123456789;

        思路:1)首先

              123456789*1 = 9   18  27  36  45  54  63  72  81

                     123456789*2 = 9   18  27  36  45  54  63  72  81

                                 123456789*3 = 9   18  27  36  45  54  63  72  81

                                                123456789*4 = 9   18  27  36  45  54  63  72  81

                                                                           123456789*5 = 9   18  27  36  45  54  63  72  81

                                                                                                        123456789*6 = 9   18  27  36  45  54  63  72  81

             

            依次相乘相加;

           2)再进位;

    #define  _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void big_data_multi (char *pstr1, char *pstr2)
    {
        int length_str1 = strlen(pstr1);
        int length_str2 = strlen(pstr2);
        int *pstr3 = (int*)malloc(sizeof(int)*(length_str1+length_str2));
        memset(pstr3, 0, sizeof(int)*(length_str1+length_str2));//一定要初始化,否则乱码
        for(int i = 0; i < length_str2; i++)//循环累乘相加
        {
            for(int  j = 0;  j < length_str1; j++)
            {
                pstr3[i + j + 1] += (pstr1[j] - '0') * (pstr2[i] - '0');
            }
        }
        for (int i = length_str1 + length_str2 - 1; i >= 0; i--)
        {
            if(pstr3[i] >= 10)
            {    
                pstr3[i - 1] += pstr3[i] / 10;
                pstr3[i] = pstr3[i]%10;
            }
        }
        int i = 0;
        while (pstr3[i] == 0)
        {
            i++;
        }
        char *pstr4 = (char*)malloc(sizeof(char)*(length_str1 + length_str2 + 1));
        int j = 0;
        for(; j < length_str1+length_str2 && i < length_str1+length_str2; j++,i++)
        {
            pstr4[j] = pstr3[i] + '0';
        }
        pstr4[j] = '';
        printf("相乘的结果是:%s
    ",pstr4);
    
    }
    
    int main()
    {
        char str1[100] = {0},str2[100] = {0};
        while(1)
        {
            gets(str1);
            printf ("str1 = %s
    ",str1);
            gets(str2);
            printf ("str2 = %s
    ",str2);
            big_data_multi (str1, str2);
        }
    
        system("pause");
    }
  • 相关阅读:
    作业帮:最长连续序列(头部插入)
    作业帮:字符串反转(头部插入)
    作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
    JVM系列之七:HotSpot 虚拟机
    JVM系列之六:内存溢出、内存泄漏 和 栈溢出
    JVM系列之四:运行时数据区
    JVM系列之五:垃圾回收
    JVM系列之三:类装载器子系统
    JVM系列之二:编译过程
    JVM系列之一:JVM架构
  • 原文地址:https://www.cnblogs.com/zhizhi25/p/5687706.html
Copyright © 2011-2022 走看看