高精度模板之高精乘高精
来源:互联网 发布:掌控网络 编辑:程序博客网 时间:2024/05/02 02:07
话说就要noip了,前两天模拟赛考了一道需要压位的高精乘高精,然后我发现高精度乘法还没有模板。话说我的写法很难看吧!因为发现考试时高精度都不是单纯的计算,又刚好学过了重载运算符,所以感觉这样写可能会方便一些吧。不管怎样,至少应该还是够用了。如果亲们看不惯就当我不存在即可。
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<cmath>#include<algorithm>using namespace std;char A[402],B[402];struct shu{int s[1602],l;} a,b,c;void pre(){a.l=strlen(A+1); b.l=strlen(B+1);int i,t;for(i=1;i<=a.l;i++) {t=A[i]-'0'; a.s[i]=A[a.l-i+1]-'0'; a.s[a.l-i+1]=t;}for(i=1;i<=b.l;i++) {t=B[i]-'0'; b.s[i]=B[b.l-i+1]-'0'; b.s[b.l-i+1]=t;}}shu operator * (const shu &x,const shu &y){shu ans;memset(ans.s,0,sizeof(ans.s));int i,j;for(i=1;i<=x.l;i++)for(j=1;j<=y.l;j++) ans.s[i+j-1]+=x.s[i]*y.s[j];ans.l=x.l+y.l-1;for(i=1;i<=ans.l;i++) {if(ans.s[i]>=10) {ans.s[i+1]+=ans.s[i]/10; ans.s[i]%=10; } }i=ans.l+1;while(ans.s[i]>0) {if(ans.s[i]>=10) {ans.s[i+1]+=ans.s[i]/10; ans.s[i]%=10; }i++; }ans.l=i-1;return ans;}int main(){while(scanf("%s%s",A+1,B+1)!=EOF) {pre(); c=a*b; for(int i=c.l;i>0;i--) printf("%d",c.s[i]); printf("\n"); }return 0;}
0 0
- 高精度模板之高精乘高精
- 高精度之减法模板
- 高精度之加法模板
- 高精度之乘法模板
- 高精度之除法模板
- 模板之高精度
- 高精度之——模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- 高精度模板
- (1)求a+b
- Uploadify404无效链接
- Android Bitmap保存到SQLite
- 答读者问(24):一个大二学生有关数据结构学习的疑问及答复
- 字符串循环右移n个字符
- 高精度模板之高精乘高精
- JavaScript正则表达式语法及使用范例大全
- 【SGU】105. Div 3 水题
- cin.get( )与cin.getline( )的区别
- 双向链表的有关操作(创建,遍历,插入,删除)
- Risk - UVa 567 Floyd
- Linux开启ssh服务,开启远程登入前提
- win8.1(x64)下搭建memcached
- hdu-1003