路漫漫 始于足下

博客 让生活更充实

大数乘法模板

/*
两个非常大的数相乘
模拟乘法运算
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#include<cmath>
using namespace std;


#define MAX_N 221  
int a1[MAX_N],a2[MAX_N];  
char s1[MAX_N],s2[MAX_N];  
int p[MAX_N*2];  
int main()  
{  
    gets(s1);  
    gets(s2);  
    int i,j;  
    
    
    int len1=strlen(s1);  
    //将数组里的内容变为0 
    memset(a1,0,sizeof(a1));  
    memset(a2,0,sizeof(a2));  
    memset(p,0,sizeof(p));  
    
    j=0;  
    for(i=len1-1; i>=0; i--)  //用数组倒着记录字符串里的数据 
    {  
        a1[j++]=s1[i]-'0';  
    }  
    j=0;  
    int len2=strlen(s2);  
    for(i=len2-1; i>=0; i--)  
    {  
        a2[j++]=s2[i]-'0';  
    }  
    
    for(i=0; i<len1; i++)  
    {  
        for(j=0; j<len2; j++)  
        {  
            p[i+j] += a1[i]*a2[j];//模拟乘法  可以自己在草稿纸上写乘法然后运算看看是否满足这个规律 
        }  
    }  
    
    
    for(i=0; i<MAX_N*2; i++)  //进位 
    {  
        if(p[i]>=10)  
        {  
            p[i+1]+=p[i]/10;  
            p[i]%=10;  
        }  
    }  
    
    for(i=MAX_N*2-1; i>=0; i--)  //找到第一个非零点 
    {  
        if(p[i])  
        break;  
    }  
    
    for(int k=i; k>=0; k--)  //从后往前输出 
    {  
        printf("%d",p[k]);  
    }  
    printf("\n");  
    return 0;  
}  

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JobsandCzj/article/details/49962261
文章标签: ACM算法 大数
个人分类: ACM-算法与刷题
上一篇Cheap Travel(暴力求解法)
下一篇大数加法模板
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭