水题 HDU 1002

来源:互联网 发布:linux 配置vsftp 编辑:程序博客网 时间:2024/06/07 08:55

         自己懵懵懂懂浑浑噩噩已经把大学的一小半过了,平时很懒惰,什么东西都按部就班,过这样的生活也实在没意思,暑假的时候搞了一段时间的ACM算是自己搞的比较有意义的事情吧! 今天这道A+B的水题,算是自己的一个新的开始,自己从鞍山回来之后就没有刷过题,在今天想要有个新的改变,嗯,就这样。

题目:HDU 1002 大数A+B 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1002

import java.math.*;import java.util.*;/** * * @author lao */public class Main {    /**     * @param args the command line arguments     */    public static void main(String[] args) {        // TODO code application logic here        BigInteger a,b;        int T;        Scanner in=new Scanner(System.in);        T=in.nextInt();        for(int i=1;i<=T;i++)        {            System.out.println("Case "+i+":");            a=in.nextBigInteger();            b=in.nextBigInteger();            if(i<T)            {                System.out.println(a+" + "+b+" = "+a.add(b) );                System.out.println();            }               else                 System.out.println(a+" + "+b+" = "+a.add(b) );        }    }    }

用java来写这道题实在是太管用了,大数有专门的BigInteger类,实现非常方便。注意类名要用Main.java


#include <iostream>#include<cstdio>#include<cstring>using namespace std;#define maxn 1010char arr1[maxn],arr2[maxn];int num1[maxn],num2[maxn],res[maxn],len_1,len_2;void big_add(){    int ad=0;    int res_len=len_1>len_2?len_1:len_2;        res_len++;    for(int i=0;i<res_len;i++)    {        res[i]=num1[i]+num2[i]+ad;        ad=res[i]/10;        res[i]=res[i]%10;    }}int main(){    int T;    scanf("%d",&T);    for(int cas=1;cas<=T;cas++)    {        scanf("%s",arr1);        scanf("%s",arr2);        len_1=strlen(arr1);        len_2=strlen(arr2);        memset(num1,0,sizeof(num1));        memset(num2,0,sizeof(num2));        memset(res,0,sizeof(res));         int c=0;        for(int i=len_1-1;i>=0;i--)            num1[c++]=arr1[i]-'0';        c=0;        for(int i=len_2-1;i>=0;i--)            num2[c++]=arr2[i]-'0';        big_add();        printf("Case %d:\n",cas);        printf("%s + %s = ",arr1,arr2);        int temp=maxn-1;        for(;temp>=0;temp--)if(res[temp])break;        if(temp==-1)            printf("0");        else        {for(int j=temp;j>=0;j--)printf("%d",res[j]);        }        printf("\n");        if(cas<T)            printf("\n");    }    return 0;}


用C++来写的话基本算是一道模拟题了,用2个char型数组保存 输入的大数,用整型数组逆向保存每位的数字,模拟一遍就可以过了。要注意一些小细节的东西。






0 0
原创粉丝点击