鱼C论坛

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

[已解决]求助

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

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

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

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

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

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

  6. 输入样例:
  7. caa

  8. 输出样例:
  9. 578
复制代码

我的代码问题在哪
  1. #include<stdio.h>
  2. #define AA 1024

  3. int main()
  4. {
  5.         int num1=0,num2,ii,pp;
  6.         char ch;
  7.         int aa[AA];
  8.        
  9.         for( (ch=getchar()),num2=0 ;num2<AA; num2++ )
  10.         {
  11.                 if(ch = '\n')
  12.                 {
  13.                         break;
  14.                 }
  15.                 else
  16.                 {
  17.                         aa[num2] = int(ch) - 97;
  18.                 }
  19.         }
  20.        
  21.         for( ii=0,pp=num2 ;ii<num2+1; ii++,pp-- )
  22.         {
  23.                 num1 = num1 + aa[pp]*(17^ii);
  24.         }
  25.        
  26.         printf("%d",num1);
  27.        
  28. }

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

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

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

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

根据上述修改,以下是修正后的代码:
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define AA 1024
  4. int main() {
  5.     int num1 = 0, num2, ii, pp;
  6.     char ch;
  7.     int aa[AA];
  8.     int length = 0;
  9.     for (ch = getchar(), num2 = 0; num2 < AA; num2++) {
  10.         if (ch == '\n') {
  11.             break;
  12.         } else {
  13.             aa[num2] = ch - 'a';
  14.             length++;
  15.         }
  16.         ch = getchar();
  17.     }
  18.     for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {
  19.         num1 += aa[pp] * pow(17, ii);
  20.     }
  21.     printf("%d", num1);
  22.     return 0;
  23. }
复制代码

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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

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

根据上述修改,以下是修正后的代码:
  1. #include <stdio.h>
  2. #include <math.h>
  3. #define AA 1024
  4. int main() {
  5.     int num1 = 0, num2, ii, pp;
  6.     char ch;
  7.     int aa[AA];
  8.     int length = 0;
  9.     for (ch = getchar(), num2 = 0; num2 < AA; num2++) {
  10.         if (ch == '\n') {
  11.             break;
  12.         } else {
  13.             aa[num2] = ch - 'a';
  14.             length++;
  15.         }
  16.         ch = getchar();
  17.     }
  18.     for (ii = 0, pp = length - 1; ii < length; ii++, pp--) {
  19.         num1 += aa[pp] * pow(17, ii);
  20.     }
  21.     printf("%d", num1);
  22.     return 0;
  23. }
复制代码

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://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) 。

下面是修改后的代码:

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

  3. #define AA 1024

  4. int main()
  5. {
  6.     int num1 = 0, num2, ii, pp;
  7.     char ch;
  8.     int aa[AA];

  9.     for (num2 = 0; num2 < AA; num2++)
  10.     {
  11.         ch = getchar();
  12.         if (ch == '\n')
  13.         {
  14.             break;
  15.         }
  16.         else
  17.         {
  18.             aa[num2] = ch - 'a';
  19.         }
  20.     }

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

  25.     printf("%d", num1);

  26.     return 0;
  27. }
复制代码


这样修改后的代码应该可以正确地将17进制数转换为10进制数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 00:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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