zoukankan      html  css  js  c++  java
  • 算法提高 高精度乘法

     
    时间限制:1.0s   内存限制:256.0MB
    提交此题    
    问题描述
      在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。
      现在输入两个整数,请输出它们的乘积。
    输入格式
      两行,每行一个正整数,每个整数不超过10000位
    输出格式
      一行,两个整数的乘积。
    样例输入
    99
    101
    样例输出
    9999
    数据规模和约定
      每个整数不超过10000位
    #include <iostream>
    #include <cmath>
    using namespace std;
    int main()
    {
    	string a;
    	string b;
    	int flag=2;
    	int max;
    	int len;
    	int u;
    	int c[20002]={0};
    	int  e[10001];
    	int  d[10001];
        cin>>a;
    	cin>>b;
    for(int i=0,l=a.length()-1;i<a.length();)
    	e[l--]=a[i++]-'0';
    	for(int j=0,m=b.length() -1;j<b.length();)
    	d[m--]=b[j++]-'0';
    	if(a.length()>b.length())//a的长度长一些 
    	{
    		len=b.length();
    		flag=1;
    		max=a.length();	
    	}
    	else//b 的长度长一些 
    	{
    	len=a.length();
    	flag=0;
    	max=b.length();
    	}
    	
    	if(flag==0)
    	{
    		for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
    		{
    		    int	k=i;
     			for(int j=0;j<max;j++)
    			{
    				int s=c[k]+e[i]*d[j];
    				c[k]=s%10;
    				c[k+1]=s/10+c[k+1];
    				k++;
    			 } 
    		 } 
    	}
    		else 
    		{
    			for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
    		{
    		    int	k=i;
    			for(int j=0;j<max;j++)
    			{
    				int s=c[k]+d[i]*e[j];
    				c[k]=s%10;
    				c[k+1]=s/10+c[k+1];
    				k++;
    			 } 
    		 } 
    		}
    		
    		for(int x=20000;x>=0;x--)
    	   {
    		if(c[x]!=0)
    		{
    		u=x;
    		break;	
    		}
    		
    	   }
    	for(int o=u;o>=0;o--)
    	{
    		cout<<c[o];
    	   
         }
    	return 0;
    }
    

      

    这道题就是大数加法和阶乘结合在一起,
    每一位依次相乘
    最后加在一次
    每一次都对结果取余数是当前的位数结果
    /10是产生的进位
    

      

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/jweie/p/8385534.html
Copyright © 2011-2022 走看看