杭电 HDU ACM 1002

       这个是AC的第三道题,之前没有怎么使用过C++,第一次尝试,也算有点意义,现在学的东西很杂,当然这次的第三题借鉴了很多其他人的思想,闲话少说,直接看题:

题目如下:

解答:

这道题主要考得是对大数据的处理,因为大数据数据长度比较长,我们是用int和long都不能定义,所以需要的是我们把它定义成string然后分别对于个位十位百位的数字进行相加最优获取结果。

首先我们看一下java写的方法,也许细节有一些小问题,但是思想是对的:

import java.math.BigInteger;
import java.util.Scanner;

class Test {
public static void main(String[] args) {
	BigInteger a,b;
	int T;
	Scanner in = new Scanner(System.in);
	T = in.nextInt();
	for(int i=1;i<=T;i++){
		System.err.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因为自己定了大数据这个类型,所以单纯的两个数相加就好所以很简单。

然后接下来,我们来看一下C++版本的解决方案:

#include<iostream>
#include<string>
#include<cstdio>


using namespace std;

int main(){
    string a,b;
    int num,sum[1000];
    cin>>num;
    for(int i=0;i<num;i++){
        cin>>a>>b;
        int m = 0,n=0,temp=0,h,k;
        int q=0;
        h = a.length();
        k = b.length();
        h = h-1;
        k = k-1;

        while(h>=0&&k>=0){
            m = a[h]-'0';
            n = b[k]-'0';
            sum[q++]= (temp+m+n)%10;
            temp = (temp+m+n)/10;
            h--;
            k--;
        }
        if(h>k){
            while(h>=0){
                m = a[h]-'0';
                sum[q++]=(temp+m)%10;
                temp=(temp+m)/10;

                h--;
            }
        }
        if(k>h){
            while(k>=0){
                n = b[k]-'0';
                sum[q++]=(temp+n)%10;
                temp=(temp+n)/10;

                k--;
            }
        }
        sum[q] = temp;
      cout<<"Case "<<i+1<<":"<<endl;
      cout<<a<<" + "<<b<<" = ";
        if(sum[q]!=0) cout<<sum[q];
        for(--q;q>=0;q--)
            cout<<sum[q];
       cout<<endl;

        if(i<num-1) cout<<endl;
    }
    return 0;
}
哎,搞了好久,现在有点后悔以前不好好学习编程,现在只能补了,希望自己努力一些,学一门会一门。

猜你喜欢

转载自blog.csdn.net/reticenthuxt/article/details/70138828