| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 707 人关注过本帖
标题:杭电acm 题目 纠结啊!!!!
只看楼主 加入收藏
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
杭电acm 题目 纠结啊!!!!
http://acm.hdu.
 




求和 但是由于精度问题 得稍微修改下
这是我的代码  
为什么是wa???
#include<stdio.h>
#include<string.h>
int main()
{
    int c[1002],k,i,l1,l2,t,j,m;
    char a[1002],b[1002];
    scanf("%d",&t);
    for(i=1;i<=t;i++)
    {
        scanf("%*c%s%s",a,b);
        for(j=0;j<1002;j++)c[j]=0;
        l1=strlen(a);
        l2=strlen(b);
        m=0;
        for(j=l1-1,k=l2-1;j>=0&&k>=0;j--,k--)
        {
            c[m++]+=(a[j]+b[k]-'0'-'0')%10;
            c[m]+=(a[j]+b[k]-'0'-'0')/10;
        }
        for(;j>=0;j--)
        {
            c[m++]+=(a[j]-'0')%10;
            c[m]+=(a[j]-'0')/10;
        }
        for(;k>=0;k--)
        {
            c[m++]+=(b[k]-'0')%10;
            c[m]+=(b[k]-'0')/10;
        }
        if(c[m]>0)m++;
        printf("Case %d:\n%s + %s = ",i,a,b);
        while(--m>=0)printf("%d",c[m]);
        printf("\n");
        if(i!=t)printf("\n");
        
        
    }
    return 0;


}
搜索更多相关主题的帖子: include 
2012-02-24 20:26
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
收藏
得分:0 
水题 !!but 就是不懂错哪里  
高手指教啊 啊啊!!
2012-02-24 20:30
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
并非水题  Total Submission(s): 99575    Accepted Submission(s): 18900

自己看看提交率   给你AC代码
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
    char a[1005],b[1005];
    int aa[1005],bb[1005],k,n=0,i;
    scanf("%d",&k);
    for (int c=1;c<=k;c++)
    {
        scanf("%s%s",a,b);
        int alen=strlen(a);
        int blen=strlen(b);
        memset(aa,0,sizeof(aa));    //清楚aa里的数值,让其为0
        memset(bb,0,sizeof(bb));
        int maxlen=blen;
        if(alen>blen) maxlen=alen;
        for(i=alen-1;i>=0;i--)
            aa[alen-i]=a[i]-'0';
        for(i=blen-1;i>=0;i--)
            bb[blen-i]=b[i]-'0';
        for(i=1;i<=maxlen;i++)
        {
            aa[i]+=bb[i];
            if(aa[i]>9)
            {
                if(i==maxlen) maxlen++;
                aa[i+1]++;
                aa[i]-=10;
            }
        }
        printf("Case %d:\n",++n);
        printf("%s + %s = ",a,b);
        for(i=maxlen;i>=1;i--)
            printf("%d",aa[i]);
        if (k==c)
            printf("\n");
        else
            printf("\n\n");
    }
    return 0;
}

                                         
===========深入<----------------->浅出============
2012-02-24 20:46
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
收藏
得分:0 
回复 3楼 laoyang103
老大 好吧 不是水题   可是我觉得我的是对的呀  不懂哪里错??
高手可以告诉我 我错在哪里吗 ??
谢谢!
2012-02-24 20:49
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:3 
我也在做这道题

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-02-24 21:21
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
收藏
得分:0 
求解啊
2012-02-24 21:23
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:2 
程序代码:
#include <stdio.h>
#include <math.h>
#include <tchar.h>
#include <string.h>
#define  N 2001
#define  M 1001

void AddResult(char *, char *);

int main(int argc, TCHAR *argv[])
{   int LineNum, i, j, k;
    char Together[N]; 
    char SepFirst[20][M], SepSecond[20][M];                   
    scanf("%d", &LineNum);
    getchar();
    for (i = 0; i < LineNum; i++)
    {
        gets(Together);
        for (j = 0; Together[j] != ' '; j++)
        {
            SepFirst[i][j] = Together[j];
        }
        SepFirst[i][j] = 0;
        j++;
        for (k = 0; Together[j] != '\0'; k++, j++)
        {
            SepSecond[i][k] = Together[j];
        }
        SepSecond[i][k] = 0;
    }
    putchar(10);

    for (i = 0; i < LineNum; i++)
    {
        printf("Case %d:\n", i + 1);
        for (j = 0; j < (int)strlen(SepFirst[i]); j++)
        {
            printf("%c", SepFirst[i][j]);
        }
        printf("+");
        for (j = 0; j < (int)strlen(SepSecond[i]); j++)
        {
            printf("%c", SepSecond[i][j]);
        }
        printf("=");
        AddResult(SepFirst[i], SepSecond[i]);
        putchar(10);
    }

    return 0;
}

void AddResult(char *SepFirst, char *SepSecond)
{
    int Result[M] = { 0 }, Assistant[M] = { 0 }, LenFirst, LenSecond, Lenth;
    int i, j, CarryFlag = 0;

    LenFirst = strlen(SepFirst);
    LenSecond = strlen(SepSecond);

    if (LenFirst <= LenSecond)
    {
        for (i = LenFirst - 1, j = 0; i >= 0; i--, j++)
        {
            Assistant[j] = (int)(SepFirst[i] - '0');
        }
        for (i = LenSecond - 1, j = 0; i >= 0; i--, j++)
        {
            Result[j] = (Assistant[j] + (int)(SepSecond[i] - '0') + CarryFlag) % 10;
            CarryFlag = (Assistant[j] + (int)(SepSecond[i] - '0') + CarryFlag) / 10;
        }
        if (CarryFlag == 1)
        {
            Result[j] = CarryFlag;
            Lenth = j;
        }
        else
            Lenth = j - 1;
    }   
    else
    {
        for (i = LenSecond - 1, j = 0; i >= 0; i--, j++)
        {
            Assistant[j] = (int)(SepSecond[i] - '0');
        }
        for (i = LenFirst - 1, j = 0; i >= 0; i--, j++)
        {
            Result[j] = (Assistant[j] + (int)(SepFirst[i] - '0') + CarryFlag) % 10;
            CarryFlag = (Assistant[j] + (int)(SepFirst[i] - '0') + CarryFlag) / 10;
        }
        if (CarryFlag == 1)
        {
            Result[j] = CarryFlag;
            Lenth = j;
        }
        else
            Lenth = j - 1;
    }       
    for (i = Lenth; i >= 0; i--)
    {
        printf("%d", Result[i]);
    }
    putchar(10);
}

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 有容就大 于 2012-2-25 21:36 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-02-25 20:14
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
收藏
得分:0 
谁能告诉我 我的错误!!!!
2012-02-26 15:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
以下是引用lxh3319在2012-2-26 15:54:11的发言:

谁能告诉我 我的错误!!!!
图片附件: 游客没有浏览图片的权限,请 登录注册

这就是你原程序的输出结果, 没解决好长度不一样的边界问题,其实不用分长短,我当时也犯这样的毛病。

梅尚程荀
马谭杨奚







                                                       
2012-02-26 19:06
lxh3319
Rank: 2
等 级:论坛游民
帖 子:29
专家分:11
注 册:2011-6-20
收藏
得分:0 
回复 9楼 有容就大
for(j=l1-1,k=l2-1;j>=0&&k>=0;j--,k--)
        {
            x=c[m]+a[j]+b[k]-'0'-'0';            //三个数相加 我弄错了 m是会变的
            c[m++]=x%10;
            c[m]+=x/10;
        
        }
        for(;j>=0;j--)
        {
            x=c[m]+a[j]-'0';
            c[m++]=x%10;
            c[m]+=x/10;
        }
        for(;k>=0;k--)
        {
            x=c[m]+b[k]-'0';
            c[m++]=x%10;
            c[m]+=x/10;
        }
现在 ac了  
谢谢
2012-02-27 19:07
快速回复:杭电acm 题目 纠结啊!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027289 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved