POJ2980大整数乘法
2015-07-21 22:17
357 查看
描述
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900 98765432100
样例输出
1219326311126352690000
代码:
求两个不超过200位的非负整数的积。
输入
有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
12345678900 98765432100
样例输出
1219326311126352690000
代码:
#include<stdlib.h> #include<stdio.h> #include<string.h> int main(){ char a[201]; char b[201]; int aa[201]; int bb[201]; int mul[410]; memset(aa,0,sizeof(aa)); memset(bb,0,sizeof(bb)); memset(mul,0,sizeof(mul)); gets(a); gets(b); int i,j; int l1=strlen(a); int l2=strlen(b); j=0; for(i=l1-1;i>=0;i--) aa[j++]=a[i]-'0'; j=0; for(i=l2-1;i>=0;i--) bb[j++]=b[i]-'0'; for(i=0;i<l1;i++) for(j=0;j<l2;j++) mul[i+j]+=aa[i]*bb[j]; for(i=0;i<410;i++) if(mul[i]>=10){int re=mul[i]/10;mul[i]%=10;mul[i+1]+=re;} bool f=false; for(i=409;i>=0;i--) {if(mul[i]!=0)f=true; if(f) printf("%d",mul[i]);} if(!f)printf("0"); return 0;}注意0*0的结果也是0 。
相关文章推荐
- eclipse中更改默认编码格式
- Linux kernel 分析之六:内核启动-开启页面映射
- STL容器效率比较
- elasticsearch IK中文分词
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(八) SearchBar搜索条 学习笔记
- awk用法
- jsp之过滤器
- iOS内存管理之浅见
- 普里姆算法
- 温故知新,基础复习(一个有序从大到小不重复的数列,任意给出一个sum值,求出数列中所有满足和为sum的数对)
- Ubuntu 14.04(32位)安装Oracle 11g(32位)全过程
- Oracle 创建分页存储过程(转帖)
- 哈希表原理及hashmap简单实现
- LeetCode之Maximal Rectangle
- 阿里面试题目总结
- 多线程之线程锁的使用
- 痛并快乐着
- 协程 及 Libco 介绍
- JDBC连接MySql数据库
- Maven实战(坐标和依赖)