鱼C论坛

 找回密码
 立即注册
查看: 1129|回复: 2

[已解决]求助

[复制链接]
发表于 2023-10-31 19:41:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题
请写一段程序将17进制数转换为10进制。

输入格式:
为一个只包含小写字母的字符串(其中a代表17进制的0,b代表17进制的1,以此类推直到q代表17进制的16),字符串以’\n’结束。

输出格式:
是一个整数,转换后的10进制数。测试用例保证合法,且转换后的整数可以用int存储。

输入样例:
caa

输出样例:
578
我的代码问题在哪
#include<stdio.h>
#define AA 1024

int main()
{
        int num1=0,num2,ii,pp;
        char ch;
        int aa[AA];
        
        for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
        {
                if(ch = '\n')
                {
                        break;
                }
                else
                {
                        aa[num2] = int(ch) - 97;
                }
        }
        
        for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
        {
                num1 = num1 + aa[pp]*(17^ii);
        }
        
        printf("%d",num1);
        
}

运行结果
caa
2465
最佳答案
2023-10-31 19:42:26
在您的代码中有几个问题需要修正:

1. 在if(ch = '\n')这一行,您使用了单个等号=而不是相等比较运算符==。应该使用if(ch == '\n')来判断换行符。

2. 在计算17进制转换为10进制的过程中,您使用了错误的运算符^。在C/C++中,^是按位异或运算符,而不是求幂运算符。要计算17的幂次方,您可以使用pow函数或者自己编写一个幂函数。

3. 在循环中,将num2作为循环条件可能会导致数组越界。建议使用另外一个变量来记录字符串的长度,并将其作为循环条件。

根据上述修改,以下是修正后的代码:
#include <stdio.h>#include <math.h>#define AA 1024int main() {    int num1 = 0, num2, ii, pp;    char ch;    int aa[AA];    int length = 0;    for (ch = getchar(), num2 = 0; num2 < AA; num2++) {        if (ch == '\n') {            break;        } else {            aa[num2] = ch - 'a';            length++;        }        ch = getchar();    }    for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {        num1 += aa[pp] * pow(17, ii);    }    printf("%d", num1);    return 0;}
这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-31 19:42:26 | 显示全部楼层    本楼为最佳答案   
在您的代码中有几个问题需要修正:

1. 在if(ch = '\n')这一行,您使用了单个等号=而不是相等比较运算符==。应该使用if(ch == '\n')来判断换行符。

2. 在计算17进制转换为10进制的过程中,您使用了错误的运算符^。在C/C++中,^是按位异或运算符,而不是求幂运算符。要计算17的幂次方,您可以使用pow函数或者自己编写一个幂函数。

3. 在循环中,将num2作为循环条件可能会导致数组越界。建议使用另外一个变量来记录字符串的长度,并将其作为循环条件。

根据上述修改,以下是修正后的代码:
#include <stdio.h>#include <math.h>#define AA 1024int main() {    int num1 = 0, num2, ii, pp;    char ch;    int aa[AA];    int length = 0;    for (ch = getchar(), num2 = 0; num2 < AA; num2++) {        if (ch == '\n') {            break;        } else {            aa[num2] = ch - 'a';            length++;        }        ch = getchar();    }    for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {        num1 += aa[pp] * pow(17, ii);    }    printf("%d", num1);    return 0;}
这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-31 19:46:14 | 显示全部楼层
问题在于以下几个地方:

1. 在for循环中,判断条件应该是 num2<AA ,而不是 num2<=AA ,因为数组aa的下标范围是0到AA-1。

2. 在判断字符ch是否为换行符时,应该使用双等号 == 而不是赋值符号 = 。正确的判断条件应该是 ch == '\n' 。

3. 在将字符转换为对应的17进制数时,应该使用ASCII码表中'a'对应的数值97,而不是固定的97。正确的转换公式应该是 aa[num2] = ch - 'a' 。

4. 在计算17进制数转换为10进制数时,应该使用乘方运算符 ^ ,而不是按位异或运算符。正确的计算公式应该是 num1 = num1 + aa[pp] * pow(17, ii) 。

下面是修改后的代码:
#include <stdio.h>
#include <math.h>

#define AA 1024

int main()
{
    int num1 = 0, num2, ii, pp;
    char ch;
    int aa[AA];

    for (num2 = 0; num2 < AA; num2++)
    {
        ch = getchar();
        if (ch == '\n')
        {
            break;
        }
        else
        {
            aa[num2] = ch - 'a';
        }
    }

    for (ii = 0, pp = num2; ii < num2 + 1; ii++, pp--)
    {
        num1 = num1 + aa[pp] * pow(17, ii);
    }

    printf("%d", num1);

    return 0;
}

这样修改后的代码应该可以正确地将17进制数转换为10进制数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表