20 条题解
-
1yuyilahanbao LV 10 @ 2014-01-28 15:46:00
其实就是高精度*单精数
只不过这里是有小数什么之类的,把每个数先算作整数,小数位数就是2*n位。
然后输入print函数改一下即可。#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 10
#define N 600
#define NN 100
typedef int big[600];
//set bignum to 0
void base_big(void *a)
{
memset(a,0,sizeof(big));
}
/*big num*simple num,
b<500
*/
void smlt(int *r,int b,int *a,int n)
{
int static i;
for (i = 0;i < n-1;i++) {
*(r+i) += *(a+i)*b;
*(r+i+1) += *(r+i)/M;
*(r+i) %= M;
}
if (i < n) *(r+i) = (*(a+i)*b+*(r+i))%M;
}
void print(big *a,int n)
{
int i,r,l;
for (i = N-1;i > 0;i--) if ((*a)[i]) break;
r=i;
if ((r==0)&&((*a)[r]==0)) {
printf("0");
return;
}
for (i = 0;i <= r;i++) if ((*a)[i]) break;
l=i;
if ((r==2*n)&&(r==l)) {
printf("1");
return;
}
printf("0.");
for (i=2*n-1;i>=l;i--) printf("%d",(*a)[i]); //if M=100 %d->%.02d
}
int main()
{
big a,b;
int *rslt,*mltor,*tmp;
int n,i,j;
char key[NN+1];
int p[4];
scanf("%d",&n); scanf("%s",key);
rslt=a; mltor=b;
base_big(rslt); //set result=0 to prepare calculate
base_big(mltor); *mltor=1; //set multiplicator=1 to prepare
for (i=0;i<n;i++) {
for (j=0;j<4;j++)
scanf("%d%%",p+j);
smlt(rslt,p[key[i]-'A'],mltor,210);
tmp=mltor; mltor=rslt; rslt=tmp;
base_big(rslt);
}
print((big *)mltor,n);
return 0;
} -
02009-10-29 16:01:58@
特判0
-
02009-07-30 18:39:23@
晕,还要高精度
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 9ms
├ 测试数据 10:答案正确... 56ms
├ 测试数据 11:答案正确... 9ms
├ 测试数据 12:答案正确... 0ms
├ 测试数据 13:答案正确... 0ms
├ 测试数据 14:答案正确... 0ms
├ 测试数据 15:答案正确... 0ms
├ 测试数据 16:答案正确... 0ms
├ 测试数据 17:答案正确... 0ms
├ 测试数据 18:答案正确... 0ms
├ 测试数据 19:答案正确... 0ms
├ 测试数据 20:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:74ms -
02009-07-14 13:24:41@
水题一遍AC了!
-
02009-02-08 21:46:02@
我鄙视vijos!!
-
02009-01-13 14:02:30@
Accepted 有效得分:100 有效耗时:2843ms
直接用的另外一题的...
真慢 -
02008-11-07 22:35:33@
最后一个点
究竟是怎么回事。。。。 -
02008-11-05 11:01:33@
(Invalid img)O,YEAH!!!
第1个AC,特别庆祝!!!!
-
02008-10-13 15:20:22@
简单题.先高精度乘法.然后小数点从一往回推..
-
02008-10-11 15:35:21@
通过 87人
少考虑了0的情况
交了好多次 我的AC率啊 -
02008-10-06 22:09:13@
第200个提交,第85个过的~~~
就为了前导0搞了好多次才过。。 -
02008-09-11 07:14:27@
庆祝AC第100题
这题也太BT了
我改了7遍...
高精浮点还是自己想的,不够完善,改来改去的
最难办的是控制最后的0,
我因此WA了n次... -
02008-08-25 14:22:34@
第15个
刚开始存取非法了
后来发现
没考虑0
晕 -
02008-08-22 22:51:14@
我来玩了
-
02008-07-25 14:02:03@
怎么忽略有效数字后的0。。。。。?????C++的。。。。
-
02008-07-19 10:22:58@
每次最前面的人都囧
-
02008-07-17 18:47:50@
地核里面有什么?
-
02008-07-16 20:43:53@
晕...没有标准输入输出文件?那咋做啊
-
-12015-02-07 21:09:32@
#include<iostream>
#include<string.h>
using namespace std;
int size;
char ans[103];
int choose[103][4];
int res[207];
void mul(int k){
int i;
for (i = 0; i < 207; i++){
res[i] *= k;
}
for (i = 0; i < 206; i++){
res[i + 1] += res[i] / 10;
res[i] %= 10;
}
}
void output(){
int point = 2 * size;
int right = 0;
while (res[right] == 0&&right<207)right++;
if (right == 207){
cout << 0 << endl;
return;
}
if (res[point] == 1){
cout << 1 << endl;
}
else{
int i;
cout << 0<<'.';
for (i = point - 1; i >= right; i--){
cout << res[i];
}
}
}
int main(){
freopen("in.txt", "r", stdin);
cin >> size;
int i,j;
cin >> ans;
char c;
for (i = 0; i < size; i++){
for (j = 0; j < 4; j++){
cin >> choose[i][j];
cin >> c;
}
}
memset(res, 0, sizeof(res));
res[0] = 1;
for (i = 0; i < size; i++){
mul(choose[i][ans[i] - 'A']);
}
output();
return 0;
} -
-12014-08-25 17:33:52@
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 10
#define N 600
#define NN 100
typedef int big[600];
//set bignum to 0
void base_big(void *a)
{
memset(a, 0, sizeof(big));
}
/*big num*simple num,
b<500
*/
void smlt(int *r, int b, int *a, int n)
{
int static i;for(i = 0; i < n - 1; i++)
{
*(r + i) += *(a + i) * b;
*(r + i + 1) += *(r + i) / M;
*(r + i) %= M;
}if(i < n) (r + i) = ((a + i) * b + * (r + i)) % M;
}
void print(big *a, int n)
{
int i, r, l;for(i = N - 1; i > 0; i--) if((*a)[i]) break;
r = i;
if((r == 0) && ((*a)[r] == 0))
{
printf("0");
return;
}for(i = 0; i <= r; i++) if((*a)[i]) break;
l = i;
if((r == 2 * n) && (r == l))
{
printf("1");
return;
}printf("0.");
for(i = 2 * n - 1; i >= l; i--) printf("%d", (*a)[i]); //if M=100 %d->%.02d
}
int main()
{
big a, b;int *rslt, *mltor, *tmp;
int n, i, j;
char key[NN + 1];
int p[4];
scanf("%d", &n);
scanf("%s", key);
rslt = a;
mltor = b;
base_big(rslt); //set result=0 to prepare calculate
base_big(mltor);
*mltor = 1; //set multiplicator=1 to preparefor(i = 0; i < n; i++)
{
for(j = 0; j < 4; j++)
scanf("%d%%", p + j);smlt(rslt, p[key[i] - 'A'], mltor, 210);
tmp = mltor;
mltor = rslt;
rslt = tmp;
base_big(rslt);
}print((big *)mltor, n);
return 0;
}
- 1