杭电1002 A+B Problem(II)
2015-07-20 21:25
429 查看
/*
大数加法的关键在于用字符型的数组解决问题,两个字符数组用于存储将要进行计算的数据,另一个整形数组或字符数组存储结果.分析:使两个字符串中的字符数字都减去'0',逐个相加大于10的可以使本位减去10,下一位自增1,
例如定义:char a[],b[];int c[];则c[]=a[]-'0'+b[]-'0';接着就是处理进位问题*/
大数加法的关键在于用字符型的数组解决问题,两个字符数组用于存储将要进行计算的数据,另一个整形数组或字符数组存储结果.分析:使两个字符串中的字符数字都减去'0',逐个相加大于10的可以使本位减去10,下一位自增1,
例如定义:char a[],b[];int c[];则c[]=a[]-'0'+b[]-'0';接着就是处理进位问题*/
#include<stdio.h>#include<string.h>#define M 10002char a[M],b[M];int c[M];int main(){ int i,t,j,L1,L2,k,cas,x,flag; scanf("%d",&t); getchar(); cas=1; while(t) { scanf("%s %s",a,b); L1=strlen(a);//记录数组a的长度 L2=strlen(b);//记录数组b的长度 k=0;flag=0; memset(c,0,sizeof(c));//数组c用来记录a[i]+b[i]的值,即两数相加的和 printf("Case %d:\n",cas++); printf("%s + %s = ",a,b); for(i=0;;i++) { if(i<L1&&i<L2) { c[k]=(a[L1-i-1]-'0')+(b[L2-i-1]-'0')+flag; flag=0; if(c[k]>9)//如果该位大于10,则进1 { c[k]=c[k]-10; flag=1; } k++; } else break; } if(L2<L1)//如果数组b的长度小于数组a的长度 { while(i<L1) { c[k++]+=a[L1-1-i]-'0'+flag; i++; flag=0; } } else if(L2>L1)//如果数组a的长度小于数组b的长度 { while(i<L2) { c[k++]+=b[L2-1-i]-'0'+flag; i++; flag=0; } } else if(L1==L2)//如果a的长度与b相等 { if(c[k]==1) k=k+1; } k=k-1; while(k>=0)//倒着输出 { printf("%d",c[k]); k=k-1; } if(t>1)printf("\n\n"); else printf("\n"); t=t-1; } return 0; }
相关文章推荐
- 剑指off-求数组最大连续和
- 任笑萱 2015/7/8 个人文档
- 赵晓铮 2015/7/10 个人文档
- 打开jsp页面出现error解决办法
- HashSet,TreeSet和LinkedHashSet的区别
- Java — 线性查找和二分查找法
- android蓝牙4.0(BLE)开发之ibeacon初步
- Mysql JDBC 连接串参数说明
- fmdb 数据库简单使用
- UVa 10142 - Australian Voting
- hdu 1260 Tickets dp
- 士兵与卡牌
- 获取Windows 10(1)
- NOI 2015 荷马史诗 k叉哈夫曼树 优先队列
- [LeetCode][Java] Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode #55 Jump Game
- Android中涉及到的焦点问题,focusable,clickable,enabled
- 我喜欢这个世界,我喜欢人
- 爬山算法 (poj 2420 A Star not a Tree?)
- Python科学计算的瑞士军刀——Anaconda 安装与配置