博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1001 高精度乘法
阅读量:6152 次
发布时间:2019-06-21

本文共 4494 字,大约阅读时间需要 14 分钟。

必须去掉前导0和后导0,一个特殊数据是对000.00这样的输出0

#include
#include
using namespace std;int main(){ string r; int n,dianwei; const int R_LEN=150;//存下的极限数位大小 short result[R_LEN],jieguo[R_LEN],chengshu[6]; while(cin>>r>>n) { int len=0; for(int i=0;i
=0;--i) { if(r[i]!='.') { jieguo[j]=result[j]=chengshu[j]=r[i]-'0'; ++j; } } while(n>=2) //如果小于2直接输出 { --n; for(int i=0;i
9;++t) //模拟进位 { result[t+1]+=result[t]/10; result[t]=result[t]%10; } } } for(int i=0;i
=dianwei;--i) { if(result[i]>0) { firstindex=i; break; } }//从左往右去掉0  int lastindex=-1; for(int i=0;i
0) { lastindex=i; break; } } if(firstindex!=-1) { while(firstindex>=dianwei) { cout<
=lastindex) { cout<
另一种做法,参照与百度百科给出的高精度乘法模板

#include 
#include
using namespace std;int la;void gaocheng(int* a,int* b,int lb){ int i,j; //la=string(a).length(); //lb=string(b).length(); int* s=new int[200]; for (i=1;i<=la+lb;i++) s[i]=0; for (i=1;i<=la;i++) for (j=1;j<=lb;j++) s[i+j-1]+=a[i]*b[j]; la=la+lb; for (i=1;i<=la;i++) { s[i+1]+=s[i]/10; a[i]=s[i]%10; } while (a[la]==0) la--; delete[] s;}int main(){ char m[30]; int n,l,j,i,k,lb,f,p,u; while (cin>>m>>n) { int a[200]={0,0},b[30]={0,0}; k=0; l=string(m).length(); la=1; lb=1; f=1; p=0; u=0; for (i=0;i
=u;i--) if (m[i]=='.') p=1; if(p==1) for(i=l-1;i>=u;i--) if (m[i]=='0') l--; else break; for (i=l-1;i>=u;i--) if (m[i]!='.') { a[la++]=m[i]-'0'; b[lb++]=m[i]-'0'; } else k=la-1; la--; lb--; if (f==0) { la--; lb--; } k*=n; j=k; for (i=0;i
k;i--) cout<
0;i--) cout<
0;i--) cout<
附上网上百度百科的高精度乘法模板

/*高精度乘法输入:两行,每行表示一个非负整数(不超过10000位)输出:两数的乘积。*/#include 
#include
#include
#define MAX 10001int bigchenfa(int *sum,int *a,int *b,int la,int lb){ int i,j,lsum = 0 ; memset(sum,0,sizeof(sum)); for(i=1 ; i<= la ; i++) /*用数组模拟运算*/ for(j=1,lsum=i-1; j<= lb ; j++) sum[++lsum] += b[j] * a[i] ; for(i=1 ; i<= lsum ; i++)/*进位处理*/ if (sum[i] >= 10) { if ( sum[lsum] >= 10) lsum ++ ; sum[i+1] += sum[i] / 10 ; sum[i] %= 10 ; } return lsum ;}int main(void){ int a[MAX]={0},b[MAX]={0},sum[MAX*2]={0} ; int la=0,lb=0,lsum=0; int i,j ; char sa[MAX],sb[MAX] ; scanf(\"%s %s\",sa,sb); la = strlen(sa); lb = strlen(sb); for(i=1,j=la-1; i<= la ; i++,j--) a[i] = sa[j] - '0' ; for(i=1,j=lb-1; i<= lb ; i++,j--) b[i] = sb[j] - '0' ; lsum = bigchenfa(sum,a,b,la,lb) ; for(i=lsum ; i> 0 ; i--) printf("%d",sum[i]); printf("\n"); return 0 ;}另:#include
int main(){char n[255]={},m[255]={};int n1[255]={},m1[255]={},s[510]={};int i,j,k=0,t,x=0,dig;int lenn,lenm;scanf("%s%s",&n,&m);lenn=strlen(n);lenm=strlen(m);for(i=0;i
=0;j--){t=k;for(i=lenn-1;i>=0;i--){s[t]+=n1[i]*m1[j];t++;}++k;dig=t;}for(i=0;i
=10){s[i]-=10;++s[i+1];}if(s[dig]!=0)for(i=dig;i>=0;i--)printf("%d",s[i]);elsefor(i=dig-1;i>=0;i--)printf("%d",s[i]);return 0;}
C++
#include 
using namespace std;int main(){int a[100],b[100],c[100],len,la,lb,i,j;long long n,m;cin>>n>>m;la=0;while(n>0){la++;a[la]=n%10;n=n/10;}lb=0;while(m>0){lb++;b[lb]=m%10;m=m/10;}memset(c,0,sizeof(c));for(i=1;i<=la;i++)for(j=1;j<=lb;j++)c[i+j-1]=c[i+j-1]+a[i]*b[j];len=la+lb;for(i=1;i<=len;i++){c[i+1]=c[i+1]+c[i]/10;c[i]=c[i]%10;}while(c[len]==0){len--;}m=c[len];while(m>0){c[len]=m%10;m=m/10;len++;}for(i=len-1;i>=1;i--) {cout<
<

转载于:https://www.cnblogs.com/zhangmingzhao/p/7256428.html

你可能感兴趣的文章
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
must implement java.io.Serializable hessian
查看>>
Microsoft Licenses Flash Lite for Windows Mobile Users
查看>>
HDOJ 2020 绝对值排序
查看>>
HDOJ/HDU 2560 Buildings(嗯~水题)
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
[20170628]12C ORA-54032.txt
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>