本來覺得很簡單的題,興沖沖做了,結果各種wrong answer,搞了幾周看到ac真是感慨啊,細節決定成敗。
1.這道題目還是比較簡單的,但是細節還是挺麻煩的,提交了幾次才通過。
2.思路:用陣列表示大數,採用最簡單的多次乘法,需要注意的是進製的處理,還有輸出的時候要嚴格符合資料的要求。
一開始,陣列採用了高位在前,低位在後,也就是x[0]儲存高位,x[maxlen]儲存低位的儲存方式,但是這樣處理很繁瑣,
後來,反轉了陣列的儲存,發現計算起來很方便,只需要在輸出的時候注意處理一下就行了。
/**************************************
* author:
* date: 2013.12.17
* result = r^n
* 0.0 < r < 99.999, 0 < n <= 25
**************************************/
#include #define rlen 6
#define maxlen 125
void calcmul(int x, int y);
int main()
state = 0;
for(i = 0; i < 6; ++i)
} for(i = 6; i >= 0; --i)
r[i] = '0';
} state = 0;
// read from stdin of revert num
dotlen = 0;
for(i = rlen - 1, j = 0; i >= 0; --i)
else
dotlen = (rlen - 1 -i) * n;
} // calc
for(i = 0; i < n - 1; ++i)
calcmul(x, y);
// putout
state = 0;
for(i = 0; i < maxlen; ++i)
} if(npos > dotlen)
npos = dotlen;
for(i = maxlen - 1; i >= npos; --i)
if(y[i] > 0 || state == 1)
} printf("\n");
} return 0;
}void calcmul(int x, int y)
} for(i = maxlen - 1; i >= 0; --i)
} // calc
for(i = 0; i < xlen; ++i)
} // carry
for(i = 0; i < maxlen - 1; ++i)
for(i = 0; i < maxlen; ++i)
y[i] = temp[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...
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 求高精度冪
題目描述 對數值很大 精度很高的數進行高精度計算是一類十分常見的問題。比如,對國債進行計算就是屬於這類問題。現在要你解決的問題是 對乙個實數r 0.0 r 99.999 要求寫程式精確計算 r 的 n 次方 r n 其中n 是整數並且 0 n 25。解題思路 很簡單的一道高精度題目。話不多說直接上 ...