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

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

HDOJ1002

[java]  view plain copy
  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 plain copy
  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 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); 
    	  }
         
	    }
} 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值