POJ 1001 求高精度冪 大數乘法系列

2021-06-26 03:32:30 字數 951 閱讀 6722

題目描述:對乙個實數r( 0.0 < r < 99.999 ),要求寫程式精確計算 r 的 n 次方(rn),其中n 是整數並且 0 < n <= 25。輸入資料中每行1-6列為r的值,n的值為8-9列。對於輸出答案,需要去除無用的前導0和後續0。整數的話不要輸出小數點。

這是乙個高精度乘法的問題,只是比普通的大數乘法多了小數點處理和冗餘0處理的問題。

首先需要把輸入資料的小數點去掉,並記錄小數點位置(變數為int point),最後處理時,小數點位置在point * n。此時注意對整數需要特殊處理一下。

對於大數相乘問題,可以手寫幾遍乘法,觀察一下過程,然後用程式模擬。這裡給出一種相對另類的乘法過程,即在最高位預留出一位最高位進製位,然後從數字高位向數字低位逐位做乘法並累加,然後再從低位結果向高位結果處理。

對於小數點和冗餘0處理的先後問題,要先處理小數點,把最終結果加上小數點後,再消去冗餘0。

下面是ac**:

# include# include# includeint _res[1000];//此處陣列若為char型會發生溢位,注意注意

void mul(char a,char b)

}i=0;

while (_res[i]==0)

i++;

for (j=0; i0)

else

res[point]='.';

}for(i=0,j=strlen(res)-1; i<=j; ++i,--j) res[i]=res[i]+res[j]-(res[j]=res[i]);//再次逆置回來方便去除後續0以及輸出

i=strlen(res)-1;

while(res[i]=='0') res[i--]=0;

}if(res[strlen(res)-1]=='.')res[strlen(res)-1]=0;

printf("%s\n",res);

}}

POJ 1001 求高精度冪

題目描述 對數值很大 精度很高的數進行高精度計算是一類十分常見的問題。比如,對國債進行計算就是屬於這類問題。現在要你解決的問題是 對乙個實數r 0.0 r 99.999 要求寫程式精確計算 r 的 n 次方 r n 其中n 是整數並且 0 n 25。解題思路 很簡單的一道高精度題目。話不多說直接上 ...

POJ 1001 高精度乘法

必須去掉前導0和後導0,乙個特殊資料是對000.00這樣的輸出0 include includeusing namespace std int main while n 2 如果小於2直接輸出 for int i 0 i dianwei i 從左往右去掉0 int lastindex 1 for i...

POJ 1001 高精度乘法

必須去掉前導0和後導0,乙個特殊資料是對000.00這樣的輸出0 include includeusing namespace std int main while n 2 如果小於2直接輸出 for int i 0 i dianwei i 從左往右去掉0 int lastindex 1 for i...