ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

第一个程序--高精度乘法

2021-07-31 10:02:57  阅读:115  来源: 互联网

标签:高精度 -- scanf len int 数组 findLen 乘法


高精度乘法注释写的应该算是比较详细了

#include<iostream>
#include<cstdio>
using namespace std;
const int N=105;
int ans[2*N];
int findLen(char c[]){
    for(int k=0;k<N;k++){
        if(c[k]<'0'){
            return k;
        }
    }
    return -1;
}
void reverseArr(char c[],int len){
    int tmp;
    for(int k=0;k<len/2;k++){
        tmp=c[k];
        c[k]=c[len-k-1];
        c[len-k-1]=tmp;
    }
}
int main(){
    char a[N],b[N];
    //养成习惯,对代码进行必要的注释
    //M位数*N位数最大位数为M+N,M位数*N位数最小位数为M+N-1————》确定结果位数
    //由于乘数位数过高,均使用数组存放,并记录乘数数组有效长度
//输入 scanf("%s",a); scanf("%s",b); //寻找数组有效长度 int len_a=findLen(a),len_b=findLen(b); //初步处理数据--》位置倒转 reverseArr(a,len_a); reverseArr(b,len_b); //核心算法 for(int i=0;b[i]>='0';i++){//乘数 for(int j=0;a[j]>='0';j++){//被乘数 ans[i+j]+=(b[i]-48)*(a[j]-48); } } // 对数据进行最终处理 for(int k=0;k<len_a+len_b-1;k++){ ans[k+1]+=ans[k]/10; ans[k]%=10; } //输出结果 if(ans[len_a+len_b-1]>0){ cout<<ans[len_a+len_b-1]; } for(int k=len_a+len_b-2;k>=0;k--){ cout<<ans[k]; } return 0; }

 

额外收获:

  • 当使用scanf输入字符串时,space和enter都能中断输入,且中断字符不会被输入。
  • 中断字符(space/enter)不会影响下一个scanf。
  • 全局数组将自动完成初始化,字符数组默认为空,整型数组默认为0。
  • 局部数组不会初始化,所以不能使用数组没有初始化的位置的值。
  • scanf/printf来自于<cstdio>头文件。

标签:高精度,--,scanf,len,int,数组,findLen,乘法
来源: https://www.cnblogs.com/sxrekord/p/high_precision_multiplication.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有