题解

20 条题解

  • 1
    @ 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;
    }

  • 0
    @ 2009-10-29 16:01:58

    特判0

  • 0
    @ 2009-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

  • 0
    @ 2009-07-14 13:24:41

    水题一遍AC了!

  • 0
    @ 2009-02-08 21:46:02

    我鄙视vijos!!

  • 0
    @ 2009-01-13 14:02:30

    Accepted 有效得分:100 有效耗时:2843ms

    直接用的另外一题的...

    真慢

  • 0
    @ 2008-11-07 22:35:33

    最后一个点

    究竟是怎么回事。。。。

  • 0
    @ 2008-11-05 11:01:33

    (Invalid img)O,YEAH!!!

    第1个AC,特别庆祝!!!!

  • 0
    @ 2008-10-13 15:20:22

    简单题.先高精度乘法.然后小数点从一往回推..

  • 0
    @ 2008-10-11 15:35:21

    通过   87人

    少考虑了0的情况

    交了好多次 我的AC率啊

  • 0
    @ 2008-10-06 22:09:13

    第200个提交,第85个过的~~~

    就为了前导0搞了好多次才过。。

  • 0
    @ 2008-09-11 07:14:27

    庆祝AC第100题

    这题也太BT了

    我改了7遍...

    高精浮点还是自己想的,不够完善,改来改去的

    最难办的是控制最后的0,

    我因此WA了n次...

  • 0
    @ 2008-08-25 14:22:34

    第15个

    刚开始存取非法了

    后来发现

    没考虑0

  • 0
    @ 2008-08-22 22:51:14

    我来玩了

  • 0
    @ 2008-07-25 14:02:03

    怎么忽略有效数字后的0。。。。。?????C++的。。。。

  • 0
    @ 2008-07-19 10:22:58

    每次最前面的人都囧

  • 0
    @ 2008-07-17 18:47:50

    地核里面有什么?

  • 0
    @ 2008-07-16 20:43:53

    晕...没有标准输入输出文件?那咋做啊

  • -1
    @ 2015-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;
    }

  • -1
    @ 2014-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 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;
    }

  • 1

信息

ID
1363
难度
7
分类
高精度 点击显示
标签
递交数
764
已通过
167
通过率
22%
被复制
4
上传者