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

    大数相乘

    今天运气很好找到一个讲的很好的博客,谢谢你啦@静之吾心

    易错点

    • 数组的大小
    • 数组的清零
    • 前导0清除方法

    大数相乘的规律

    ans[i+j] = a[i] * a[j];

    然后在进行进位处理,不停的累加到ans[i+j]上

    然后也不用过多担心三位数以上,其实都是可以进位的不必要一下就处理完

    代码分析

    分为4部分

    • 将字符串转化为数组,倒序存储
    • 根据大数相乘的规律,得到对应位置上的结果
    • 进位处理
    • 删除前导0
    • 最后将结果输出

    博主的代码写的一气呵成,很容易理解,就是忘记清零了,haha

    code

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int maxn = 100;
    
    char a[maxn],b[maxn];
    int x[maxn+10],y[maxn+10],z[maxn*2+10];
    
    int len1, len2;
    int main(){
    	int i, j;
    	memset(a,0,sizeof a);
     	memset(b,0,sizeof b);
     	memset(x,0,sizeof x);
     	memset(y,0,sizeof y);
     	memset(z,0,sizeof z);
    	scanf("%s %s",a,b);
     	len1 = strlen(a);
     	len2 = strlen(b);
    // 	cout << a << " " << b << endl;
     	for(j = 0 , i = len1-1; i>=0 ; i--)x[j++] = a[i] - '0';
     	for(j = 0 , i = len2-1; i>=0 ; i--)y[j++] = b[i] - '0';
     	for(i = 0 ; i < len1; i++){
     		for(j = 0 ; j < len2; j++){
     			z[i+j] = z[i+j] + x[i] * y[j];
    		 }
    	 }
    	for(int ii = 0 ; ii < maxn * 2; ii++){
    		if(z[ii] >= 10)
    		{
    			z[ii+1] = z[ii+1] + z[ii]/10;
    			z[ii] = z[ii] % 10;
    		}
    	}
    	
    //	for(int k = 0 ; k < maxn ; k++){
    //		cout << z[k];
    //	}
    //	cout << endl;
    	
    	for(i = maxn * 2; i>0;i--){ //删除前导0 
    		if(z[i] == 0)
    			continue;
    		else
    			break;
    	}
    	for(; i>= 0; i--)
    		cout << z[i];
    	cout << endl;	
    	return 0;
    }
    

    我明白一个道理

    老师之前跟我谈话的时候就说到,当你无法前进的时候,你就要想一想,是因为什么导致了现在的状况,是因为知识点没有理解就开始敲代码,还是因为别的

    这个其实很重要,比如这个大数相乘,如果你做过,看这类的代码那么就很流畅,很顺利,但是相反没有看过,很可能就被大数相乘这个名字吓到,所以说 知识点不够,没有记住,这个才是我的局限,所以并不是智商的差距,而是努力与不努力的差距

  • 相关阅读:
    其实说起来要国庆节回去,心里有点担心再最后买不到票
    现在快要中秋节,之后又是国庆节
    天气开始降温,今天会下雨
    昨天晚上控制家里的电脑,与家里人视频
    有时候手机打开微信或者其它应用真的是非常慢
    手机有时候卡的不行,还是自己照顾着使用吧
    这几天晚上都是再看小别离,还是有点意思
    函数初识
    Python文件操作
    Python字符编码
  • 原文地址:https://www.cnblogs.com/pprp/p/8666012.html
Copyright © 2011-2022 走看看