| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2298 人关注过本帖
标题:pat 中数组-08. 字符串转换成十进制整数(15),总是有错误,不能得满分,求指 ...
只看楼主 加入收藏
woduyou
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2014-11-19
结帖率:0
收藏
已结贴  问题点数:2 回复次数:2 
pat 中数组-08. 字符串转换成十进制整数(15),总是有错误,不能得满分,求指点
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
    char str[1000];
    int num[1000];

    int i;
    int flag = 0;
    int f;
    int sum = 0;
    int count = 0;
    int temp;
    gets(str);
    if(strlen(str)==0)
    {
        return 0;
    }
    for(i=0;str[i]!='#';i++)
    {
        if (str[i]== '-'&&!flag)
        {
            f=1;//用于判断第一个字符是不是负数
        }
        else if(str[i] >= '0' && str[i] <= '9')
        {
            num[count] = str[i]- '0';
            count++;
            flag = 1;
        }
        else if(str[i] >= 'a' && str[i] <= 'f')
        {
         
            num[count] = str[i]-'a'+10;
            count++;
            flag = 1;
        
        }
        else if(str[i] >='A' && str[i] <= 'F')
        {
            
            num[count] = str[i]-'A'+10;
            count++;
            flag = 1;
         }
    }
    //求和函数
        temp = count;
        for(i=0;i<count;i++)
        {
            if(num[i] >= '0' && num[i] <= '9')
            {
                sum = sum + (num[i])*pow(16,temp-1);
                temp--;
            }
            else if(num[i] >= 'a' && num[i] <= 'f')
            {
                sum = sum + (num[i])*pow(16,temp-1);
                temp--;
            }
            else
            {
                sum = sum + (num[i])*pow(16,temp-1);
                temp--;
            }
        }
        if (f==1)
        {
            sum = -sum;
            printf("%d\n",sum);
        }
        else
        {
            printf("%d\n",sum);
        }
    return 0;
}
搜索更多相关主题的帖子: include return 十进制 字符串 count 
2014-11-19 09:12
woduyou
Rank: 1
等 级:新手上路
帖 子:6
专家分:7
注 册:2014-11-19
收藏
得分:0 
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为“-”,代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:
+P-xf4+-1!#
输出样例:
-3905
自己能输出-3905但是显示只有11分,4分错误,但找不到哪里错误
2014-11-19 09:18
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:2 
程序代码:
#include<stdio.h>

int main(void)
{
    char ch ;
    int flag = 0 ;
    long sum = 0 ;
    while ( (ch = getchar()) != '#' ) {
        if ( ch == '-' ) {
            if( flag == 0 )
                flag = 1 ;
            else
                continue ;
        }
        if ( ch >= '0' && ch <= '9' ) {
            sum *= 16 ;
            sum += ch - '0' ;
        }
        if ( ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f' ) {
            ch |= 32 ;
            sum *= 16 ;
            sum += ch - 'a' + 10 ;
        }
    }
    if ( flag == 1 ) 
        ch = '-' ;
    else
        ch = ' ';
    printf ( "转换后的十进制数为:%c%ld。\n", ch, sum ) ;
    return 0;
}


你的问题出在没有把输出结果声明为长整型。我这段代码可能会出的问题是不满足输入条件。

[ 本帖最后由 yahwei 于 2014-11-20 21:23 编辑 ]

[qq]949654600[/qq]
2014-11-20 21:16
快速回复:pat 中数组-08. 字符串转换成十进制整数(15),总是有错误,不能得满分 ...
数据加载中...
 
   



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

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