大数据相乘

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BigNumberMultiplication
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int first = 4916;
                int second = 12345;
                long result = first * second;
                Console.WriteLine(string.Format("{0} * {1} = {2}\n\n", first.ToString(), second.ToString(), result.ToString()));

                string firstStr = "100000000000000000000";
                string secondStr = "100000000000000000000";
                string resultStr = MultipFunction(firstStr, secondStr);
                Console.WriteLine("The result is: {0}", resultStr.TrimStart(‘0‘));
                Console.WriteLine("The length of the result is: {0}", resultStr.TrimStart(‘0‘).Length);
                Console.ReadKey();
            }
            catch (Exception ex)
            { }
        }

        //大数据乘法
        private static string MultipFunction(string firstNumStr, string secondNumStr)
        {
            try
            {
                int firstNumLength = firstNumStr.Length;
                int secondNumLength = secondNumStr.Length;
                int resultNumLength = firstNumLength + secondNumLength;
                int[] firstNumValue = new int[firstNumLength];
                int[] secondNumValue = new int[secondNumLength];
                int[] resultNumValue = new int[resultNumLength];
                //遍历字符串,将每一位的字符转换成为int整形插入整形数组中
                for (int i = 0; i < firstNumLength; i++)
                {
                    firstNumValue[i] = firstNumStr[i] - 48;
                }
                for (int i = 0; i < secondNumLength; i++)
                {
                    secondNumValue[i] = secondNumStr[i] - 48;
                }
                //定义的整形数组初始化各个位就是0;所以下面赋0的过程可以省略
                for(int i = 0; i < resultNumLength; i++)
                {
                    resultNumValue[i] = 0;
                }

                //算法的核心(小学笔算乘法的流程),将两个数按位进行相乘-->组合成结果的整形数组
                //然后对此结果整形数组进行遍历,结果的低位取整附加给临近的高位,低位取余赋给本低位(注:这里说的低位恰好是数组的高位,即数组下标大的位)
                for (int i = firstNumLength - 1; i >= 0; i--)
                {
                    for (int j = secondNumLength - 1; j >= 0; j--)
                    {
                        resultNumValue[i + j + 1] += firstNumValue[i] * secondNumValue[j];
                        resultNumValue[i + j] += resultNumValue[i + j +1] /10;
                        resultNumValue[i + j + 1] = resultNumValue[i + j + 1] % 10;
                    }
                }

                //将整形数组转化成字符数组
                char[] temp = new char[resultNumLength];
                for (int i = 0; i < resultNumLength; i++)
                {
                    temp[i] = (char)(resultNumValue[i] + 48);
                }
                //将字符数组转化为字符串
                string resultStr = new string(temp);
                return resultStr;
            }
            catch (Exception ex)
            {
                return string.Empty;
            }
        }
    }
}

  

时间: 2025-01-05 06:44:46

大数据相乘的相关文章

大数据相乘————阶乘因式分解(一)

describe Given two Numbers m, n, m is a prime number. N (0 < = n < = 10000) of the factorial prime factors, there are many m. The input The first line is an integer s (0 < s < = 100), said the number of sets of test data Subsequent s lines, ea

大数据的乘法

//大数据相乘,具体的算法思想见c #define _CRT_SECURE_NO_WARNINGS //vs2013去掉安全检查 #include <stdlib.h> #include <string.h> #include <iostream> using namespace std; class big_data { public: void init_string() { cout << "str1 = "; cin >&g

阿里巴巴大数据竞赛总结

——谨将此文献给阿瑞(@Nyanko君一生懸命)和湛卢.阿瑞在MapReduce等方面提供的技术支持,使我们成为最早充分利用ODPS的团队之一:湛卢提出很多分析问题的新思路,让我们在走投无路的时候屡次重拾希望. 0.    写在最前面 这个系列的几篇文章,记录我们队对于问题的整个处理过程.分成两个部分:首先的这一篇,记录我们分析问题的思路,以及由此建立的特征体系,模型的选择和融合:下一篇(也许会有),总结一下top10团队的做法(这个必须要等到8月20日他们答辩以后了). 这个系列的文章重点围绕

小明哥教你使用c++实现大数据之加减乘除以及模除运算

在c++中常用的数据类型有 char:1 bit,short 2 bit,int 4 bit,long long 8 bit等等,以上数据类型标识的数据大小非常有限,如果遇到大于他们能表示的范围时,计算结果就会有误,日常生活中的计算器也是如此,我国计算两个比较大的数的运算,也会出现错误,或者不能正常显示, 例如计算123456789123456789*987654321987654321 计算结果如下: 为了解决上述问题,我写了一个计算大数据四则运算以及求模的小项目,实现的功能有 + - * /

大数据的乘法实现——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                      

大数据系列修炼-Scala课程07

由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函数能够让方法的调用更加便捷 println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet //(1 to 9)数组中的map方法向数组中放* 用foreach用于来循环 println _ 表

大数据乘法

一:代码实现 //大数据乘法运算 #include <stdio.h> #include <stdlib.h> #include <string.h> int BigDataMul(char *num01, char *num02) { int res = 0, i = 0, j = 0; int length01 = 0, length02 = 0, totallength = 0; if(NULL == num01 || NULL == num02) { res =

大数据工具比较:R 语言和 Spark 谁更胜一筹?

本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这种比较不是很理想,但是对于那些曾经遇到过这些问题的人,下文中的一些数字一定会让你很感兴趣. 你是否曾把一个机器学习的问题丢到R里运行,然后等上好几个小时?而仅仅是因为没有可行的替代方式,你只能耐心地等.所以是时候去看看Spark的机器学习了,它包含R语言大部分的功能,并且在数据转换和性能上优于R语言

java中不用BigInteger实现大数据的乘法操作

昨天看到一个题目:计算1234!,不能用BigInteger类 众所周知阶乘的数据会很大,常用的int和long型根本不够用.一般想到的只有BigInteger类,但是题目中明确说了不能用,所以只能想其它办法. 阶乘其实就是乘法的递归,这道题目可以简化为如何实现大数据的乘法,int和long型都装不下的数据,只能用String来表示,所以只要实现了两个String表示数字的乘法就可实现题目要求. 想想我们自己手算乘法的步骤,基本都是列一个竖式,分别按位相乘,进位的数相加..只要用程序将这个过程模