UVA537

这个题我自己写的戳代码WA了好久,就开始找BUG,找了好久终于发现了,就是题中不能直接

用isalpha函数判断数字末尾,必须用>='0'&&<='9',貌似是因为题中并没有说没有空格,我只是看着例子写的

,由此看来一定要注意题的意思,而不要迷惑于给的实例,实例只是一个参考,

好吧,我的戳代码找不到了,贴上一个思路和我差不多,但比我简洁的多的代码吧:

#include<stdio.h>  
#include<string.h>  
double sum(char *str)  
{  
    double s=0;  
    int leap,i,n;  
    n=strlen(str);  
    leap=1;  
    for(i=0;i<n;i++)  
    {  
        if(str[i]>='0'&&str[i]<='9')  
        {  
            s=s*10+str[i]-'0';  
        }  
        else  
        {  
            for(i=i+1;i<n;i++)  
            {  
                s=s*10+str[i]-'0';  
                leap=leap*10;  
            }  
        }  
    }  
    return s/leap;  
}  
void pan(char *str)  
{  
    double shu[100];  
    char s[100];  
    int i,n,leap,j;  
    int con;  
    n=strlen(str);  
    memset(shu,0,sizeof(shu));  
    for(i=0;i<n;i++)  
    {  
        if(str[i]=='=')  
        {  
            con=str[i-1];  
            for(j=i+1;j<n;j++)  
            {  
                if(str[j]!='.'&&(str[j]<'0'||str[j]>'9'))  
                {  
                    s[j-i-1]='\0';  
                    break;  
                }  
                s[j-i-1]=str[j];  
            }  
            i=j;  
            shu[con]=1.0*sum(s);  
            if(str[i]=='m')  
                shu[con]*=0.001;  
            if(str[i]=='k')  
                shu[con]*=1000;  
            if(str[i]=='M')  
                shu[con]*=1000000;  
        }  
    }  
    if(shu['P']==0)  
    printf("P=%.2lfW\n",1.0*shu['U']*shu['I']);  
    if(shu['U']==0)  
    printf("U=%.2lfV\n",1.0*shu['P']/shu['I']);  
    if(shu['I']==0)  
    printf("I=%.2lfA\n",1.0*shu['P']/shu['U']);  
}  
int main()  
{  
  
    int n,i;  
    char str[1000];  
    scanf("%d%*c",&n);  
    for(i=0;i<n;i++)  
    {  
        gets(str);  
        printf("Problem #%d\n",i+1);  
        pan(str);  
        printf("\n");  
    }  
    return 0;  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值