大数乘法?

#define MAX_INPUT_SIZE 10000
#define MAX_RESULT_SIZE (MAX_INPUT_SIZE * 2 - 1)
char a[MAX_INPUT_SIZE],b[MAX_INPUT_SIZE],res[MAX_RESULT_SIZE];
void mult(char result[], char a[], char b[])//res一定要清空
{
    int al, bl;    // a length, b length
    int ri, ai, bi;    // r index, a index, b index
    char tmp, carry;
    al = strlen(a);
    bl = strlen(b);

    carry = 0;
    for (bi = bl-1; bi >= 0; bi--)
    {
        for (ai = al-1; ai >= 0; ai--)
        {
            ri = (bl-1-bi) + (al-1-ai);
            tmp = (a[ai]-‘0‘) * (b[bi]-‘0‘) + result[ri] + carry;
            result[ri] = tmp % 10;
            carry = tmp / 10;
        }
        while (carry)
        {
            ri++;
            tmp = result[ri] + carry;
            result[ri] = tmp % 10;
            carry = tmp / 10;
        }
    }
    int i = MAX_RESULT_SIZE - 1;
    while (!result[i]) i--;
    while (i >= 0) result[i--] += ‘0‘;
}
void print(char result[])
{
    int i = MAX_RESULT_SIZE - 1;
    while (!result[i]) i--;
    while (i >= 0) putchar(result[i--] + ‘0‘);
    putchar(‘\n‘);
}
时间: 2024-10-06 09:20:54

大数乘法?的相关文章

最短的计算大数乘法的c程序

#include <stdio.h> char s[99],t[99]; int m,n; void r(int i,int c) { int j=0,k=i; while(k)c+=s[j++]*t[k---1]; if(i)r(i-1,c/10); printf("%d",c%10); } void main() { gets(s);gets(t); while(s[n])s[n++]-=48; while(t[m])t[m++]-=48; r(m+n-1,0); }

大数乘法

1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 <= 1000,A,B >= 0) Output 输出A * B Input示例 123456 234567 Output示例 28958703552 相关问题 大数加法 0 大数开平方 640 大数进制转换 320 大数除法 320 大数乘法 V2 80 代码: 1 #inclu

ACM学习历程—51NOD1028 大数乘法V2(FFT)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 题目大意就是求两个大数的乘法. 但是用普通的大数乘法,这个长度的大数肯定不行. 大数可以表示点值表示法,然后卷积乘法就能用FFT加速运算了. 这道题是来存模板的. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath>

【大数乘法】

1 #include<cstdio> 2 #include<cstring> 3 const int Len = 100; 4 void Mul(char a[],char b[],char c[])//大数乘法 5 { 6 int i,j; 7 int alen = strlen(a),blen = strlen(b); 8 memset(c,0,Len); 9 for(i = 0; i < alen; i++) 10 for(j = 0; j < blen; j++

大数乘法的几种算法分析及比较(2014腾讯南京笔试题)

转自:http://blog.csdn.net/chhuach2005/article/details/21168179 1.题目 编写两个任意位数的大数相乘的程序,给出计算结果. 2.题目分析 该题相继被ACM.华为.腾讯等选作笔试.面试题,若无准备要写出这种程序,还是要花一定的时间的.故,觉得有必要深入研究一下.搜索了网上的大多数该类程序和算法,发现,大数乘法主要有模拟手工计算的普通大数乘法,分治算法和FFT算法.其中普通大数乘法占据了90%以上,其优点是空间复杂度低,实现简单,时间复杂度为

HDOJ-1042 N!(大数乘法)

http://acm.hdu.edu.cn/showproblem.php?pid=1042 题意清晰..简单明了开门见山的大数乘法.. 10000的阶乘有35000多位 数组有36000够了 # include <stdio.h> # include <string.h> # define MAX 36000 int BigNum[MAX], NowLen; void Multi(int number) { int Temp[MAX]={0}, Tlen = 0, t;//Tem

大数乘法 (poj2389)

模板 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; void cheng( char *a, char *b, char *sum ) { int temp[2500]; int lena,lenb,l; lena=strlen(a); lenb=strlen(b); int len = lena + lenb;

Uva-oj Product 大数乘法

Product Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Description The problem is to multiply two integers X, Y. (0<=X,Y<10250) Input The input will consist of a set of pairs of lines. Each line in pair cont

组合数学 + 大数乘法 + 大数除法 之 hdu 1261 字串数

//  [3/17/2015 JmingS] /* 此题可直接推导出公式: {(A1+A2+……+An)!} / {A1!A2!……An!} 由于 (12×26)! = 312! 只能通过数组来存储,所以又涉及『大数乘法』和『大数除法』, 大数实现的主要思想模拟手算,具体参考程序. */ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5

[POJ] #1002# Exponentiation : 大数乘法

一. 题目 Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 156373   Accepted: 38086 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of