高精度 A*B Problem
2016-02-04 15:07
162 查看
题目:请戳此处
#include<stdio.h> #include<stdlib.h> #include<string.h> char s[30000],l[30000]; long long a[30001],b[30001],c[60000],al,bl,cl,i,j,x; int main() {gets(s); al=strlen(s); for (i=0;i<(5-al%5)%5;i++){ strcpy(l,s); strcpy(s,"0"); strcat(s,l); } if (al%5!=0) al=(al/5+1)*5; for (i=0;i<al/5;i++) a[i+1]=(s[al-i*5-1]-'0')+(s[al-i*5-2]-'0')*10+(s[al-i*5-3]-'0')*100+(s[al-i*5-4]-'0')*1000+(s[al-i*5-5]-'0')*10000; gets(s); bl=strlen(s); for (i=0;i<(5-bl%5)%5;i++){ strcpy(l,s); strcpy(s,"0"); strcat(s,l); } if (bl%5!=0) bl=(bl/5+1)*5; for (i=0;i<bl/5;i++) b[i+1]=(s[bl-i*5-1]-'0')+(s[bl-i*5-2]-'0')*10+(s[bl-i*5-3]-'0')*100+(s[bl-i*5-4]-'0')*1000+(s[bl-i*5-5]-'0')*10000; for (i=1;i<=bl/5;i++) for (j=1;j<=al/5;j++) c[i+j-1]=c[i+j-1]+a[j]*b[i]; for (i=1;i<=al/5+bl/5;i++){ c[i+1]=c[i+1]+c[i]/100000; c[i]=c[i]%100000; } x=0; for (i=al/5+bl/5;i>0;i--){ if (c[i]!=0 && x==0){ x=1; cl=i; } if (x){ if(i<cl){ if (c[i]<10) printf("0"); if (c[i]<100) printf("0"); if (c[i]<1000) printf("0"); if (c[i]<10000) printf("0"); } printf("%d",c[i]); } } if (x==0) printf("0"); puts(""); return 0; }
相关文章推荐
- 自定义动画
- python 静态方法和类方法
- Eclipse集成反编译插件jd-Eclipse
- nginx 多站点配置方法集合
- symfony2 Event Listener(2)
- untiy 3d ShaderLab读后感_0_目录
- iOS-圆形图像显示(UIImageView)
- 机器学习技法 笔记二 dual support vector machine
- JAVA反序列化漏洞
- 前端零基础学习提纲
- AR儿童绘本技术实现-静态着色
- UVa 1585 Score
- mybatis generator学习
- Nginx反向代理和负载均衡部署指南
- Java并发之(3):锁
- 10大优秀的移动Web应用程序开发框架推荐
- HYSBZ/BZOJ 1036 [ZJOI2008] 树的统计Count - 动态树LCT
- Java Criteria表关联查询(两个表未定义关联关系)
- Java实现UDP之Echo客户端和服务端
- 【Android】3.15 短串分享功能