第一个程序--高精度乘法
2021/7/31 11:08:46
本文主要是介绍第一个程序--高精度乘法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
高精度乘法(注释写的应该算是比较详细了)
#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>
头文件。
这篇关于第一个程序--高精度乘法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南