JAVA高精度4_遞推求值
一開始迭代順序弄反了,a2=a3,a1=a2,a0=a1......太無腦了...因為從0開始,100-3,迴圈計算97次
import java.math.BigInteger; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { BigInteger a0 = in.nextBigInteger(); BigInteger a1 = in.nextBigInteger(); BigInteger a2 = in.nextBigInteger(); BigInteger a3 = BigInteger.ZERO; for(int i = 1; i<=97; i++) { a3 = a0.add(a1).add(a2); a0 = a1; a1 = a2; a2 = a3; } System.out.println(a2); } } }
用陣列套公式做也行:
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); BigInteger a[] = new BigInteger[100]; while(cin.hasNext()) { for(int i = 0; i <= 2; ++i) a[i] = cin.nextBigInteger(); for(int i = 3; i <= 99; ++i) a[i] = a[i - 1].add(a[i - 2]).add(a[i - 3]); System.out.println(a[99]); } } }
C/C++版:
也就是把數位存進數組裡面,思路迭代和第一中Java一樣:
#include <stdio.h> #include <string.h> #define MAX 1010 int a[MAX],b[MAX],c[MAX],sum[MAX]; void init(int x,int *a) { int i=0; while(x) { a[i++]=x%10; x/=10; } } int main() { int aa,bb,cc; while(scanf("%d %d %d",&aa,&bb,&cc)!=EOF) { int i,j,t; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); init(aa,a);init(bb,b);init(cc,c); /*if(aa==0&&bb==0&&cc==0) { printf("0\n"); continue; }*/ //for(i=0;i<10;i++) //printf("%d %d %d ",a[i],b[i],c[i]); for(i=3;i<=99;i++) { memset(sum,0,sizeof(sum)); for(j=0;j<MAX;j++) { sum[j]+=(a[j]+b[j]+c[j]); if(sum[j]>9) { t=sum[j]; sum[j]=t%10; sum[j+1]=t/10; } } for(j=0;j<MAX;j++) { a[j]=b[j]; b[j]=c[j]; c[j]=sum[j]; } } for(j=MAX-1;j>0&&sum[j]==0;j--); for(;j>=0;j--) printf("%d",sum[j]); printf("\n"); } return 0; }
相關推薦
JAVA高精度4_遞推求值
一開始迭代順序弄反了,a2=a3,a1=a2,a0=a1......太無腦了...因為從0開始,100-3,迴圈計算97次 import java.math.BigInteger; impor
NYOJ 301 遞推求值【矩陣快速冪取模】
遞推求值 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 給你一個遞推公式: f(x)=a*f(x-2)+b*f(x-1)+c 並給你f(1),f(2
藍橋杯演算法提高——遞推求值(矩陣快速冪)
問題描述 已知遞推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3. 初始值為:F(1, 1)=2, F(1,
演算法提高 遞推求值 (C程式碼只有50分, 附上答案C++程式碼,看起來比較吃力)
問題描述 已知遞推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3. 初始值為:F(1, 1)=2, F(1, 2)=3, F(
2016年ACM/ICPC大連賽區 C題(JAVA高精度求sqrt(5)+威佐夫博弈)
題目連結:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5747 題意:除了資料範圍為10^100次方以外
JAVA高精度_求高精度冪
要想用Java輕快的水過這道題,要先了解下JAVA.math中的幾個方法 1.Java.math.BigDecimal.toPlainString() 返回此BigDecimal的字串表示形式不帶指數字段。 例如來個小對比:函式 toPlainString() 和 t
poj 2096 Collecting Bugs 【概率DP】【逆向遞推求期望】
tdi cor ros quick -a sim total 3.0 pla Collecting Bugs Time Limit: 10000MS Memory Limit: 64000K Total Submissions
新疆大學ACM-ICPC程序設計競賽五月月賽(同步賽)F 猴子排序的期望【Java/高精度/組合數學+概率論】
keyset 競賽 turn ext ID return 組合數學 AS vid 鏈接:https://www.nowcoder.com/acm/contest/116/F 來源:牛客網 題目描述 我們知道有一種神奇的排序方法叫做猴子排序,就是把待排序的數字寫在卡片上,
028_shell腳本遞歸求值
AS lse reference enc exp 階乘計算 number true scripting 一、 #!/bin/sh factorial() { if [ "$1" -gt "1" ]; then i=`expr $1 - 1` j=`fa
【HDOJ6222】Heron and His Triangle(Java,二分,遞推)
ret 直接 for out ext n-1 multipl system angle 題意:讓你找這樣的一個三角形,三條邊為t,t-1,t+1,並且面積為整數,最後滿足t大於等於n。 n<=1e30 思路:直接推式子不會,打表找規律 f(n)=4*f(n-1)-f(
高精度算法_求組和
精度 r+ bits out 題目 ace ans sin include 題目原型是洛谷的P1771 #include<bits/stdc++.h> using namespace std; int k,x; int a[100]; int ans; int
JAVA高精度演算法 BigInteger用法詳解 大數四則運算
在用C或者C++處理大數時感覺非常麻煩,但是在Java中有兩個類BigInteger和BigDecimal分別表示大整數類和大浮點數類,至於兩個類的物件能表示最大範圍不清楚,理論上能夠表示無線大的數,只要計算機記憶體足夠大。 這兩個類都在java.math.*包中,因此每次必須在開頭處引用該包。
遞推求階乘
/*用遞推法求階乘*/ #include <stdio.h> int main() { long fac(int n);//使用前需要宣告 int n; long fact=0;// printf("please input a interger number:\n
【java資料結構】遞推解決的漢諾塔問題
在學習資料結構的時候,遇到漢諾塔問題,就寫了自己的理解,希望對您有幫助。 package com.qxlx.six; /** * 遞推解決的漢諾塔問題 * * @author jia * */ public class TowerApp { public
Java面向物件——用遞迴求斐波那契數列
1.用非遞迴方式求斐波那契數列: package Hello; public class Test { public static void main(String[] args) {
Java高精度計算
import java.util.Scanner;import java.math.BigDecimal;public class Main{ public static void main(String[] args) { Scanner cin = new Scanner(System.in); Bi
逆元 遞推求逆元
其實有些題需要用到1-p模p的所有逆元,這裡p為奇質數。那麼如果用快速冪求時間複雜度為O(p log(p)), 如果對於一個1000000級別的素數,這樣做的時間複雜度是很高了。實際上有的演算法,有一
大資料階乘運算-java高精度運算
import java.math.BigDecimal; /** * 高精度運算 * @author RSun * @Date 2012-11-7下午11:22:04 */ public class TestBigInteger {
JAVA 高精度加法
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void ma
Java 高精度的大數字運算
為了解決Java基本資料型別在運算時會出現的溢位和計算不精確的問題。Java 提供了兩個類BigInteger和BigDecimal,專門用於進行高精度運算。凡是能用int 或float 做的事情,用BigInteger和BigDecimal也可以做,只是必須