大数乘以大数

#include<iostream>
using namespace std;
int main(){
    char s1[100],s2[100];
    int res[100];
    while(cin>>s1>>s2){
        memset(res,0,sizeof(res));
        int len1=strlen(s1);
        int len2=strlen(s2);
        for(int i=0;i<len1/2;i++)
            swap(s1[i],s1[len1-i-1]);
        for(int i=0;i<len2/2;i++)
            swap(s2[i],s2[len2-i-1]);
        for(int i=0;i<len1;i++){
            for(int j=0;j<len2;j++){
                res[i+j]+=(s1[i]-‘0‘)*(s2[j]-‘0‘);
            }
        }
        for(int i=0;i<len1+len2;i++){
            if(res[i]>10)
            {
                res[i+1]+=res[i]/10;
                res[i]=res[i]%10;
            }
        }
        int i;
        for( i=len1+len2;(res[i]==0)&&i>=0;i--);  //跳过前导0
        if(i>=0)
            for(;i>=0;i--)
                cout<<res[i];
        else
            cout<<0<<endl;
        cout<<endl;

    }
    return 0;
}

时间: 2024-10-25 15:38:28

大数乘以大数的相关文章

高精度之大数乘大数

上一篇说了简单的大数乘以小数的问题,绝大多数的问题解决不了. 现在我们来说一下大数乘以大数. 大数乘以大数也是用来模拟手算. 举个例子吧! 先从个位开始一个一个的乘 乘完个位然后再乘十位,乘十位的时候要和个位的想成的结果相加. 这里注意乘十位的时候 就不要和乘个位数字的结果中的最后一位相加了 .就是如图搓位. 就是这样 . 下面先贴上我的代码. #include<iostream> #include<string.h> using namespace std; void mult(

精度计算-大数乘大数

精度计算                     大数乘大数 本算法是用来计算一个大数(现有的数据类型无法表示的数)乘以一个大数(现有的数据类型无法表示的数). 算法思路是把大数的每一位都当做一个字符放入一个字符数组中,再把乘数的各个位与被乘数的各个位从最高位依次相乘,将结果存放在一个二维数组res中.例如计算12*12,res[0][0] = 1,res[0][1] = 2,res[1][0] = 2,res[1][1] = 4,那么最终结果的数组s,s[0] = res[0][0]= 1,s

精度计算-大数加大数

精度计算                大数加大数 本算法是用来计算一个大数(现有的数据类型无法表示的数)加上一个大数(现有的数据类型无法表示的数). 算法思路是把作为被加数和加数的大数的每一位都当做一个字符分别放入一个字符数组中,再把加数的各个位与被加数的各个位从最低位依次相加,将结果存放在一个字符指针中,最后再放入一个结果数组中. 下面是我的C语言实现过程 #include<stdio.h> #include<string.h> void add(char a[],char b

大数乘以小数

#include<iostream> using namespace std; //13457689* 23 int foun(char c[],int m) { int len=strlen(c); char s; bool flag; int x=0,d[1000]; for(int i=0;i<len/2;i++){ s=c[i]; c[i]=c[len-1-i]; c[len-i-1]=s; } for(int i=0;i<len;i++){ d[i]=(c[i]-'0')

组合数学 + 大数乘法 + 大数除法 之 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

(母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023

Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10372    Accepted Submission(s): 5543 Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Sta

nyoj 114某种排序(水 大数+优化大数)

某种序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 数列A满足An = An-1 + An-2 + An-3, n >= 3 编写程序,给定A0, A1 和 A2, 计算A99 输入 输入包含多行数据 每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000) 数据以EOF结束 输出 对于输入的每一行输出A99的值 样例输入 1 1 1 样例输出 69087442470169316923566147 来源 水

hdu 1023 Train Problem II 这题运用到大数相乘+大数相除+卡特兰数

Train Problem II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6454    Accepted Submission(s): 3514 Problem Description As we all know the Train Problem I, the boss of the Ignatius Train Stat

n阶贝塞尔曲线绘制(C/C#)

原文:n阶贝塞尔曲线绘制(C/C#) 贝塞尔是很经典的东西,轮子应该有很多的.求n阶贝塞尔曲线用到了?德卡斯特里奥算法(De Casteljau's Algorithm) 需要拷贝代码请直接使用本文最后的例程,文章前面的大部分代码都不是最佳实践,是在编程过程中的摸索(走过的弯路),不过这些示范对笔者今后写算法启发很大. 要完成的功能是根据起点,终点和控制点,绘制n阶贝塞尔曲线 首先看n阶贝塞尔曲线的公式 公式中用了组合数,大数组合数计算也有算法: 简言之就是把 ?大数乘以大数除以大数 ?这个过程