java 大数题用BigInteger类,就很简单了

来源:互联网 发布:山西老年大学网络报名 编辑:程序博客网 时间:2024/05/17 12:46

 小白一个,第一次做大数题,开始没有头绪,百度后发现用java BigInteger的话非常简单

HDOJ1002

[java] view plaincopy
  1. //hdoj 1002  
  2. import java.util.Scanner;//导入Scanner类    
  3. import java.math.*;//用到BigInteger类  
  4. public class Main {    
  5.          
  6.         public static void main(String[] args) {   
  7.         Scanner cin=new Scanner(System.in);  
  8.         while(cin.hasNext()){    
  9.             int i=1;  
  10.             int t=cin.nextInt();//输入次数  
  11.             BigInteger a,b,sum;  
  12.             while (t>=i){  
  13.                 a=cin.nextBigInteger();  
  14.                 b=cin.nextBigInteger();  
  15.                 sum=a.add(b);//直接相加  
  16.                 System.out.println("Case "+i+":");  
  17.                 System.out.println(a+" + "+b+" = "+sum);  
  18.                 if(t>i)  
  19.                     System.out.println("");//没这条AC不了  
  20.                 i++;  
  21.             }  
  22.               
  23.               
  24.         }     
  25.           
  26.     }  
  27. }   



如果用c++则比较繁琐些

[cpp] view plaincopy
  1. //hdoj1002  
  2. #include <iostream>    
  3. #include <string.h>    
  4. using namespace std;    
  5.   
  6. #define MAX_SIZE 1000 //定义一个常量  
  7.   
  8. void clear(int n,int a[],int b[],int c[])//重置函数  
  9. {  
  10.     for(int i=0;i<n;i++)    
  11.         {    
  12.             a[i]=0;    
  13.             b[i]=0;    
  14.             c[i]=0;    
  15.         }  
  16. }  
  17.   
  18.   
  19. int main()    
  20. {    
  21.     char s1[MAX_SIZE],s2[MAX_SIZE];    
  22.     int s11[MAX_SIZE]={0},s22[MAX_SIZE]={0},sum[MAX_SIZE]={0},i,j=1;//  
  23.     int len1,len2,maxlen,t;    
  24.     cin>>t;    
  25.     while(t--)    
  26.     {    
  27.         cin>>s1>>s2;    
  28.         len1=strlen(s1);    
  29.         len2=strlen(s2);    
  30.         maxlen=len1>len2?len1:len2;   
  31.         for(i=0;i<len1;i++)    
  32.             s11[i]=s1[len1-i-1]-'0';//ASCII码中数字字符和数字相差48,即’0‘  
  33.         for(i=0;i<len2;i++)    
  34.             s22[i]=s2[len2-i-1]-'0';    
  35.         for(i=0;i<maxlen;i++)    
  36.         {    
  37.             sum[i]+=s11[i]+s22[i];    
  38.             sum[i+1]=sum[i]/10;//如果大于10则向前进1位  
  39.             sum[i]=sum[i]%10;//大于10则取余    
  40.         }    
  41.         if(sum[i]==1)    
  42.             maxlen++;//若sum[i]=1说明sum[i]为最高位后一位    
  43.         cout<<"Case "<<j<<":"<<endl;    
  44.         j++;    
  45.         cout<<s1<<" + "<<s2<<" = ";    
  46.         for(i=maxlen-1;i>=0;i--)    
  47.             cout<<sum[i];    
  48.         cout<<endl;    
  49.         if(t!=0)    
  50.             cout<<endl;    
  51.      clear(maxlen,s11,s22,sum); //重置  
  52.     }    
  53.     
  54. }    

有了之前的经验,再做大数题就不会困惑了,HDOJ1042很快就AC了

//hdoj 1042import 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);        intn=cin.nextInt();//输入N值    while(n>1){    b=b.add(a);    c=c.multiply(b);    n--;      }    System.out.println(c);       }             }} 


0 0
原创粉丝点击