zoukankan      html  css  js  c++  java
  • poj1001 大数相乘 注意

    注意乘法的模拟,位数的控制,还有是小数点的控制,最后是0的控制

    #include<iostream>
    #include<cstdio>
    #include<string.h>
    using namespace std;
    char str[10];
    int n, dot;
    int res[999999], a[999999], b[999999];
    int len, lena, lenb;
    
    void mul()
    {
    	int i,j;
    
    	memset(res,0,sizeof(res));
    
    	for(i=1;i<=lena;i++)//这是大数相乘的精髓
    	{
    		for(j=1;j<=lenb;j++)
    		{
    			res[i+j-1]+=a[i]*b[j];//注意i+j-1的为数控制,注意+号
    			if(res[i+j-1]>9)
    			{
    				res[i+j]+=res[i+j-1]/10;
    				res[i+j-1]%=10;
    			}
    		}
    	}
    
    	if(res[lena+lenb-1]>9)
    	{
    		res[lena+lenb]+=res[lena+lenb-1]/10;
    		res[lena+lenb-1]%=10;
    	}
    	
    	lena=lena+lenb;
    
    	for(i=1;i<=lena;i++)a[i]=res[i];
    }
    
    int main()
    {
    	int i, j, up, down;
    	while (scanf("%s %d", str, &n)!=EOF)
    	{
    		dot=-1;
    		for(i=5,j=1;i>=0;i--)//这个循环很妙啊,双向复制,还找出了小数点位置
    		{
    			if(str[i]!='.')a[j]=b[j++]=str[i]-'0';
    			else dot=i;
    		}
    
    		if(dot==-1)lena=lenb=6;
    		else lena=lenb=5;
    
    		for(i=1;i<n;i++)mul();
    
    		if(dot==-1)
    		{
    			for(i=lena;i>=1;i--)
    				printf("%d",a[i]);
    			printf("\n");
    		}else
    		{
    			dot=5-dot;
    			dot*=n;
    			for(i=1;i<=lena;i++)
    			{
    				if(a[i]!=0)
    				{
    					down=i;
    					break;
    				}
    			}
    
    			for(j=lena;j>=1;j--)
    			{
    				if(a[j]!=0)
    				{
    					up=j;
    					break;
    				}
    			}
    
    			i=up;
    
    			if(up<dot)i=dot;//小数点的控制加前导0后导0的控制
    			j=down;
    			if(j>dot)j=dot+1;
    
    			for(;i>=j;i--)
    			{
    				if(i==dot)printf(".");
    				printf("%d",a[i]);
    			}
    			printf("\n");
    		}
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    webstorm
    呐,这是某蒟蒻幼稚的博客 ~~Welcome
    CSP-S 2021 补题记录
    CSP-S 2021 游记
    Tarjan 算法小结
    FHQ Treap 浅析
    2048游戏 (C++ Windows)
    线段树 算法分析
    树状数组 算法分析
    数学期望(ξ) 浅析
  • 原文地址:https://www.cnblogs.com/jackes/p/2426999.html
Copyright © 2011-2022 走看看