高精度乘法
来源:互联网 发布:淘宝红包链接怎么复制 编辑:程序博客网 时间:2024/06/02 00:21
#include<bits/stdc++.h>using namespace std;const int p=1000;const int N=1000;string s[2];int num[4]={1,10,100,1000};int a[2][N],l[2];int sum[N*2];int iter,itera,tmp;int main(){ ios::sync_with_stdio(false);// cout<<s[0].size()<<' '<<s[1].size()<<endl; for(int k=0;k<=1;k++){ cin>>s[k]; int shouwei0=0; while(*(s[k].begin()+shouwei0)==48) //string的器到底指向哪儿啊????? shouwei0++; reverse(s[k].begin(),s[k].end());// cout<<s[k]<<' '<<s[k].size()-shouwei0<<endl; //success; itera=0; for(int i=0;i<s[k].size()-shouwei0;i++){ if(iter==3){ a[k][itera++]=tmp; tmp=0; iter=0; } tmp+=(s[k][i]-48)*num[iter++]; } if(tmp){ a[k][itera++]=tmp; tmp=0; iter=0; } l[k]=itera;/* for(int i=l[k]-1;i>=0;i--){ if(i==l[k]-1) printf("%d",a[k][i]); else printf("%04d",a[k][i]); } cout<<endl;*/ } //开始乘了;// cout<<l[0]<<' '<<l[1]<<endl; //success; for(int i=0;i<l[0];i++) for(int j=0;j<l[1];j++){ sum[i+j]+=a[0][i]*a[1][j];// cout<<sum[j]<<endl; //success;// system("pause"); } int flag=0; for(int i=N*2-1;i>=0;i--) if(sum[i]){ flag=i; break; //注意break; } for(int i=0;i<=flag;i++){ sum[i+1]+=sum[i]/p; sum[i]%=p; } for(int i=N*2-1;i>=0;i--) if(sum[i]){ flag=i; break; //注意break; } int beacon=0; for(;flag>=0;flag--){ if(!beacon){ printf("%d",sum[flag]); beacon=1; } else printf("%03d",sum[flag]); } return 0;}
万进制并不稳定
数据大了之后乘法表中间的还是超了int范围
所以改用千进制过了洛谷这题;
fbi warning wwwwwwwwwwww
阅读全文
0 0
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- 高精度乘法
- RTTI机制(运行时类型识别)
- JAVA入门笔记01
- 请求和响应
- webview之独立进程
- SpringMVC启动过程详解
- 高精度乘法
- 筛选省市区的java项目
- linux打包指令,压缩指令学习
- 数据库中的五种约束及其添加方法 五大约束
- SQL查询每个用户首次购买商品
- CodeForces
- 全排列
- [阅读笔记]Programming Models for Deep Learning
- 【iOS】基于Realm数据库的记账软件--时间线模块(三)