A + B Problem II(高精度加法)
2016-06-24 18:02
288 查看
#include <stdio.h> #include <string.h> int main() { int lenmax,la,lb,k,i,n,len,lenmin,l=1; char a[1000]; char b[1000]; char sum[1000]; char ch; scanf("%d",&n); getchar(); while(n--) { scanf("%s",&a); scanf("%s",&b);//输入a和b//奥注意输入时y la=strlen(a)-1; lb=strlen(b)-1; lenmax=(la>lb?la:lb); lenmin=(la<lb)?la:lb; for(i=0;i<=lenmax+1;i++)//将0位置留出来,防止越位,一共len+1位 sum[i]='0'; //开始计算 //计算分2类,一类la==lb,二类la>lb或la<lb for(i=lenmax+1;lenmin!=-1;i--)//写相同的部分,从后往前,要防止进位 { if(sum[i]+a[la]+b[lb]>=154)//154是三个数加起来等于10时的ascll的和,如1+4+5=49+52+53=154 { sum[i]=sum[i]+a[la--]+b[lb--]-106;//106是通过1+9+1-10=1=49=(49+57+49)-106 sum[i-1]='1'; } else { sum[i]=a[la--]+b[lb--]+sum[i]-96; } lenmin--; } /*以上为两个数字相同的末位,下面开始讨论如果有剩余*/ if(la<0) { for(k=i;k>=1;k--) { if(sum[k]+b[lb]>=106) { sum[k]=sum[k]+b[lb--]-58;//1+9=10=49+57-58=48 sum[k-1]='1'; } else { sum[k]=b[lb--]+sum[k]-48;//1+0-x=1=49+48-48=49 } } } else { for(k=i;k>=1;k--) { if(sum[k]+a[la]>=106) { sum[k]=sum[k]+a[la--]-58;//1+9=10=49+57-58=48 sum[k-1]='1'; } else { sum[k]=a[la--]+sum[k]-48; } } } //打印sum数组 printf("Case %d:\n%s + %s = ",l,a,b); if(sum[0]>'0'&&sum[0]<='9') { printf("%c",sum[0]); } for(k=1;k<=lenmax+1;k++) printf("%c",sum[k]); printf("\n"); l++; if(n)printf("\n"); } return 0; }
做了,好久,昨天晚上8.00钟写,写到9.30,刮大风,下雨了,我打着雨伞,走在雨中。我们这边,旁边的城市,刮起了龙卷风,还下了冰雹,死了98人,伤是500多人,厄尔尼诺现象,室友说这和七月下雪,是一样的;
然后,今天从上午,10.00左右,写,写了一遍,然后出错,调了好久,一直是错,干脆,就睡了一觉,重新写了一遍,吃饭去
javaimport java.util.Scanner; import java.math.BigInteger; public class Main { public static void main(String []args){ BigInteger a,b; int T; Scanner input=new Scanner(System.in); T=input.nextInt(); for(int i=1;i<=T;i++){ a=input.nextBigInteger(); b=input.nextBigInteger(); System.out.println("Case"+" "+i+":"); System.out.println(a+" + "+b+" = "+a.add(b)); } } }
相关文章推荐
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 计算字符串最后一个单词长度
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- 矩阵的乘法操作
- 蚂蚁爬行问题
- 蚂蚁爬行问题
- 求两个数的最大公约数【ACM基础题】
- 打印出二进制中所有1的位置
- 杭电题目---一只小蜜蜂
- HDOJ 1002 A + B Problem II (Big Numbers Addition)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- 初学ACM - 组合数学基础题目PKU 1833
- POJ ACM 1002
- POJ 2635 The Embarrassed Cryptographe