这个是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;
}
哎,搞了好久,现在有点后悔以前不好好学习编程,现在只能补了,希望自己努力一些,学一门会一门。