小白一个,第一次做大数题,开始没有头绪,百度后发现用java BigInteger的话非常简单
HDOJ1002
- //hdoj 1002
- import java.util.Scanner;//导入Scanner类
- import java.math.*;//用到BigInteger类
- public class Main {
- public static void main(String[] args) {
- Scanner cin=new Scanner(System.in);
- while(cin.hasNext()){
- int i=1;
- int t=cin.nextInt();//输入次数
- BigInteger a,b,sum;
- while (t>=i){
- a=cin.nextBigInteger();
- b=cin.nextBigInteger();
- sum=a.add(b);//直接相加
- System.out.println("Case "+i+":");
- System.out.println(a+" + "+b+" = "+sum);
- if(t>i)
- System.out.println("");//没这条AC不了
- i++;
- }
- }
- }
- }
如果用c++则比较繁琐些
- //hdoj1002
- #include <iostream>
- #include <string.h>
- using namespace std;
- #define MAX_SIZE 1000 //定义一个常量
- void clear(int n,int a[],int b[],int c[])//重置函数
- {
- for(int i=0;i<n;i++)
- {
- a[i]=0;
- b[i]=0;
- c[i]=0;
- }
- }
- int main()
- {
- char s1[MAX_SIZE],s2[MAX_SIZE];
- int s11[MAX_SIZE]={0},s22[MAX_SIZE]={0},sum[MAX_SIZE]={0},i,j=1;//
- int len1,len2,maxlen,t;
- cin>>t;
- while(t--)
- {
- cin>>s1>>s2;
- len1=strlen(s1);
- len2=strlen(s2);
- maxlen=len1>len2?len1:len2;
- for(i=0;i<len1;i++)
- s11[i]=s1[len1-i-1]-'0';//ASCII码中数字字符和数字相差48,即’0‘
- for(i=0;i<len2;i++)
- s22[i]=s2[len2-i-1]-'0';
- for(i=0;i<maxlen;i++)
- {
- sum[i]+=s11[i]+s22[i];
- sum[i+1]=sum[i]/10;//如果大于10则向前进1位
- sum[i]=sum[i]%10;//大于10则取余
- }
- if(sum[i]==1)
- maxlen++;//若sum[i]=1说明sum[i]为最高位后一位
- cout<<"Case "<<j<<":"<<endl;
- j++;
- cout<<s1<<" + "<<s2<<" = ";
- for(i=maxlen-1;i>=0;i--)
- cout<<sum[i];
- cout<<endl;
- if(t!=0)
- cout<<endl;
- clear(maxlen,s11,s22,sum); //重置
- }
- }
有了之前的经验,再做大数题就不会困惑了,HDOJ1042很快就AC了
//hdoj 1042
import java.util.Scanner;//导入Scanner类
import java.math.*;//用到BigInteger类
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
while(cin.hasNext()){
BigInteger a=BigInteger.valueOf(1);//不能直接给BigInteger赋值 要通过valueOf方法
BigInteger b=BigInteger.valueOf(1);
BigInteger c=BigInteger.valueOf(1);
int n=cin.nextInt();//输入N值
while(n>1){
b=b.add(a);
c=c.multiply(b);
n--;
}
System.out.println(c);
}
}
}