求和1-1000000...000(n個0)相加
阿新 • • 發佈:2018-12-16
前言
java實驗課上要求1~1000000000之間資料相加求和,首先看到這個題,這還不簡單,直接用long資料型別,一個for迴圈解決問題,一秒出答案:500000000500000000;然後老師隨手在1000000000後面加了n個0,讓我計算結果。。。。。,顯然最後的結果無法用基本資料型別表示,全都會溢位。之後老師提示我們用兩個整形陣列來儲存資料,陣列中的元素對應相加,然後進位,最後用個迴圈輸出陣列中的元素,也就是最終結果了。話不多說,下面看程式碼。
實現程式碼
/** * 計算從1~1000000000之間的和,列印輸出結果 */ import java.util.Arrays; /** * @author 逝不等琴生 * */ public class test3_1_2 { /** * @param args */ /* * 進位處理 * */ public void carryBit(int [] number) { int temp=0; for(int i=0;i<number.length-1;i++) { temp=number[i]/10; number[i]%=10; number[i+1]+=temp; } } /* * 列印陣列 * */ public void printArry(int ...number)//可變長度引數 { int end=number.length-1; for(;end>=0&&number[end]==0;end--);//過濾掉實際結果後面的0 for(int i=end;i>=0;i--) { System.out.printf("%d" ,number[i]); } System.out.println(); } /* * 加數自增 * */ public void increase(int []number) { number[0]++; carryBit(number); } /* * 兩陣列相加 * */ public void add(int []first,int []second) { for(int i=0;i<first.length;i++) { second[i]+=first[i]; } carryBit(second); } public int []addBigNumber(int []data) { int result[]=new int[20];//設定結果的位數 int end[]=Arrays.copyOf(data, data.length); end[end.length-1]=1; while(!Arrays.equals(data, end)) { add(data, result); increase(data); } return result; } public static void main(String[] args) { // TODO 自動生成的方法存根 test3_1_2 counter=new test3_1_2(); //int data[]= {1,0,0,0,0,0,0,0,0,0};//0000000001,設定初值,那麼對應的末值也就確定了為1000000001 //int end[]= {0,0,0,0,0,0,0,0,0,1};//1000000000 //counter.printArry(end); int [] data=new int[10]; data[0]=1; int [] result=counter.addBigNumber(data); counter.printArry(result); } }
我這裡是計算1+2+3+…+1000000000的值,如果要計算其他的相加求和的話只需要修改data[] 和 public int []addBigNumber(int []data)函式中end[]的值就ok了。
每日一言
滿招損,謙受益---------三國殺陸神將