大数据阶乘——字符串乘法器

char s[1001]; //字符串s存储乘法得到的大数字,s[0]代表低位

int GetLength()//返回s的最大不为空的元素下标
{
    int i;
    for(i=1000; i>=0; i--)
    {
        if(s[i]!=‘0‘)
        {
            break;
        }
    }
    return i;
}

void cal(int k)//计算大数字s和小数字k相乘
{
    int add=0;//进位数
    int i;
    int temp;
    for(i=0; i<=GetLength(); i++)//
    {
        temp=(s[i]-‘0‘)*k+add;//注意字符与数字之间的区别,下面也是
        s[i]=temp%10+‘0‘;
        add=temp/10;
    }
    while(add)
    {
        s[i++]=add%10+‘0‘;
        add/=10;
    }
}

int main()
{
    int n;

    while(scanf("%d",&n)!=EOF)
    {
        //初始化s
        s[0]=‘1‘;
        for(int i=1; i<=1000; i++)
        {
            s[i]=‘0‘;
        }

        //从1开始乘到n
        for(int i=1; i<=n; i++)
        {
            cal(i);
        }

        int flag=0;
        cout<<n<<"!=";
        for(int i=1000; i>=0; i--)
        {
            if(s[i]!=‘0‘)
            {
                flag=1;
            }
            if(flag)
            {
                cout<<s[i];
            }
        }
        cout<<endl;
    }
    return 0;
}
时间: 2024-10-14 22:04:19

大数据阶乘——字符串乘法器的相关文章

python计算大数据阶乘

while 1: temp=input('请输入一个正整数:') c=int(temp) a=1 b=1 while a<=c-1: b=b*(a+1) a=a+1 print(b) 上述代码可以计算各种数据的阶乘.相比C语言不会存在长度溢出问题,不用模拟算法.

利用字符串和十进制逢10进位的特性实现大数据的算术运算。(加法案例)

java中普通的数据类型int,long等不支持大数据间的算术运算,会出现丢失精度的问题,甚至无法用现有数据类型表示. 例如:对这两个数做加法运算:1243543534646546546465465465464654+32423985348957348957348957348957348574=? 在java中Long类型已经无法表示了,Long类型的最大值为Long.MAX_VALUE=9223372036854775807. 但jdk类库中提供了BigInteger类型,可以解决. 这里我用

HW—可怕的阶乘n!__注意大数据函数的使用BigInteger

java.math.BigInteger系列教程(四)BigInteger的诞生原因 为什么java里面要出现BigInteger类型呢?相信很多人有这个疑问,其实原因很简单,它可以表达更大范围的数值,远远比long表示的最大值还要大的多数.在整数类型里面,long可以表达最大值,如下所示: 1 2 3 4 5 6 7 public class Test { public static void main(String[] args) { System.out.println(Long.MAX_

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

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

较大数据的问题

大数据运算和放置 这里先列部分遇到的问题 1.100的阶乘 这里在我所学到的数据类型只有浮点数可以放置但是得到的结果并不正确 所以我使用数组来放置并计算 include<stdio.h> int main() { int arr[10000]={1,0}; int k=1; int n=0; for(int i=1;i<=100;i++) { for(int j=99;j>=0;j--) { if(arr[j]!=0) { n=j+1;//这里获取到位数 break; } } fo

底层战详解使用Java开发Spark程序(DT大数据梦工厂)

Scala开发Spark很多,为什么还要用Java开发原因:1.一般Spark作为数据处理引擎,一般会跟IT其它系统配合,现在业界里面处于霸主地位的是Java,有利于团队的组建,易于移交:2.Scala学习角度讲,比Java难.找Scala的高手比Java难,项目的维护和二次开发比较困难:3.很多人员有Java的基础,确保对Scala不是很熟悉的人可以编写课程中的案例预测:2016年Spark取代Map Reduce,拯救HadoopHadoop+Spark = A winning combat

使用Stack堆栈集合大数据运算

使用Stack堆栈集合大数据运算 package com.sta.to; import java.util.Iterator; import java.util.Stack; public class DaMax { public void jiaFa(String value1, String value2) { /** * 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com * @author 小沫 */ // 把字符串用toCharArray拆成字符 char[] c1

千万级大数据的Mysql数据库SQL语句优化

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用

大数据常见错误

1.用./bin/spark-shell启动spark时遇到异常:java.net.BindException: Can't assign requested address: Service 'sparkDriver' failed after 16 retries! 解决方法:add export SPARK_LOCAL_IP="127.0.0.1" to spark-env.sh 2.java Kafka producer error:ERROR kafka.utils.Util