不枉风来水顺 发表于 2023-10-31 19:41:02

求助

问题
请写一段程序将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;
       
        for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
        {
                if(ch = '\n')
                {
                        break;
                }
                else
                {
                        aa = int(ch) - 97;
                }
        }
       
        for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
        {
                num1 = num1 + aa*(17^ii);
        }
       
        printf("%d",num1);
       
}

运行结果
caa
2465

Mike_python小 发表于 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 1024

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

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

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

    printf("%d", num1);

    return 0;
}


这样,您的代码应该能够正确将17进制数转换为10进制数。如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 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 = ch - 'a' 。

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

下面是修改后的代码:

#include <stdio.h>
#include <math.h>

#define AA 1024

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

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

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

    printf("%d", num1);

    return 0;
}


这样修改后的代码应该可以正确地将17进制数转换为10进制数。
页: [1]
查看完整版本: 求助